public virtual int Save(string fileToBeSaved, int remember, uint formatIndex)
{
// The file name can be null. Then try to use the Url.
var tempFileToBeSaved = fileToBeSaved;
if (string.IsNullOrEmpty(tempFileToBeSaved) && !string.IsNullOrEmpty(Url))
{
tempFileToBeSaved = Url;
}
if (string.IsNullOrEmpty(tempFileToBeSaved))
{
throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture),
"fileToBeSaved");
}
var setProjectFileDirtyAfterSave = false;
if (remember == 0)
{
setProjectFileDirtyAfterSave = IsProjectFileDirty;
}
// Update the project with the latest flavor data (if needed)
PersistXMLFragments();
var result = VSConstants.S_OK;
var saveAs = true;
if (NativeMethods.IsSamePath(tempFileToBeSaved, FileName))
{
saveAs = false;
}
if (!saveAs)
{
var fileChanges = new SuspendFileChanges(Site, FileName);
fileChanges.Suspend();
try
{
// Ensure the directory exist
var saveFolder = Path.GetDirectoryName(tempFileToBeSaved);
if (!Directory.Exists(saveFolder))
Directory.CreateDirectory(saveFolder);
// Save the project
buildProject.Save(tempFileToBeSaved);
SetProjectFileDirty(false);
}
finally
{
fileChanges.Resume();
}
}
else
{
result = SaveAs(tempFileToBeSaved);
if (result != VSConstants.OLE_E_PROMPTSAVECANCELLED)
{
ErrorHandler.ThrowOnFailure(result);
}
}
if (setProjectFileDirtyAfterSave)
{
SetProjectFileDirty(true);
}
return result;
}