我有一个visual studio 2015扩展,它从数据库中读取文件并从模板创建解决方案和项目。然后将这些文件作为ProjectItems添加到项目中(类型VSProject2)。
我想将文件与csproj和sln文件一起保存在文件夹中,以便以后可以在没有扩展名的情况下打开它。
但是,包含解决方案窗口中文件的文件夹在磁盘上为空。
所以我很困惑。我已经尝试保存projectItems,但它仍然没有在磁盘上的文件夹中结束。
我添加了变量名称的文件夹" foldername"到项目。让它成为TimeAndAttendance。因此,在磁盘上创建了一个TempProject文件夹,其中包含一个文件夹TimeAndAttendance。我希望将csproj文件和源文件(添加为ProjectItems)保存在该文件夹中。
public void CreateSolution()
{
// This function creates a solution and adds a Visual C# Class library project to it.
try
{
Solution2 soln = (Solution2)visualStudioInstance.Solution;
String csTemplatePath;
Project projCS = null;
parameterWindowEventsList = new Dictionary<EnvDTE.Window, WindowEvents>();
String csPrjPath = Path.Combine(Config.Cluster.WorkingPath, "TempProject");
if (Directory.Exists(csPrjPath))
{
DirectoryInfo di = new DirectoryInfo(csPrjPath);
foreach (var dir in di.GetDirectories())
{
dir.Attributes = FileAttributes.Normal;
FileInfo fi = new FileInfo(dir.FullName);
fi.IsReadOnly = false;
dir.Delete(true);
}
di.Attributes = FileAttributes.Normal;
di.Delete(true);
}
csTemplatePath = soln.GetProjectTemplate("TAEngineTemplate.zip", "CSharp");
// Create a new C# Class Library project using the template obtained above.
soln.AddFromTemplate(csTemplatePath, csPrjPath, "TAEngineProject", false);
foreach (Project p in soln.Projects)
{
if (String.Compare(p.Name, "TAEngineProject") == 0)
{
projCS = p;
break;
}
}
System.Windows.Forms.Application.DoEvents();
if (projCS != null)
{
taEngineProject = projCS.Object as VSProject2;
}
taEngineProject.References.Add(Path.Combine(Config.Engine.EngineBinPath, "Engines.TimeAndAttendance.dll"));
taEngineProject.References.Add("System.Data.DLL");
taEngineProject.References.Add("System.Xml.DLL");
taEngineProject.References.Add("System.Core.dll");
taEngineProject.Project.ProjectItems.AddFolder(folderName);
taEngineProject.Project.Save(null);
}
catch (SystemException ex)
{
log.Error("Problem with creating solution. " + ex);
}
}
最后一行
taEngineProject.Project.Save(null);
似乎没有做任何事情。
以下是我将源文件加载为ProjectItem的位置。如果没有try-catch功能,如何进行任何改进也是受欢迎的。我继承了这段代码,第一次看到它时只是摇了摇头,但我也不知道如何改进它。 : - (
public ProjectItem LoadAsProjectItem(string sourcePath)
{
if (taEngineProject != null)
{
string filename = sourcePath.Substring(sourcePath.LastIndexOf("\\") + 1);
ProjectItem retItem;
ProjectItem projFolderItem = taEngineProject.Project.ProjectItems.Item(folderName);
try
{
retItem = projFolderItem.ProjectItems.Item(filename);
}
catch (Exception)
{
retItem = projFolderItem.ProjectItems.AddFromFile(sourcePath);
}
return retItem;
}
return null;
}