向导中包含以下代码,用于将现有项目添加到新解决方案中:

//generating files
if (dte.Solution.Projects.Count < 1) // Solution is empty or doesn't exist
{
    dte.Solution.Create(oneFolderHigher(Params.OutputDir, solutionName),
                        solutionFileName(solutionName));
}

// adding created project to solution
dte.Solution.AddFromFile(Path.Combine(Params.ProjectRootFolder,
                                      Params.ProjectName + ".csproj"));


它在MS Visual Studio 2010下工作正常,但在2012年下工作失败(我尝试了第二个参数):


  System.Runtime.InteropServices.COMException(0x80004004):操作中止(来自HRESULT的异常:0x80004004(E_ABORT))
  在EnvDTE.SolutionClass.AddFromFile(String FileName,Boolean Exclusive)
  在Wizard.Generator.NewProjectGenerator.Generate(Action`1 logMessage)
  在Wizard.Forms.WizardForm.Finish()


发生此错误后,我将新项目手动添加到解决方案中,一切正常。但是我们不能只是说:“对不起,我们不能为您添加新生成的项目,因此请您自己添加它。”

MSDN建议:


  如果要在执行期间隐藏其UI,可以使用LaunchWizard方法而不是AddFromFile执行向导。 LaunchWizard具有允许您禁用UI的参数。


但是此方法需要一些向导文件,因此它不是解决方案。

有人可以帮忙吗?
向导从“新建->项目”菜单运行。

最佳答案

这是该问题的解决方法(由我的老板建议):

Before adding the project to solution, project file should be converted to
VS2012 format.


但是代码有点丑陋:

using (StreamReader sr = new StreamReader(newFile))
using (StreamWriter sw = new StreamWriter(projectFile, false, Encoding.UTF8))
{
     while (sr.Peek() >= 0)
     {
         string s = sr.ReadLine();
         if (s.Contains("<Project ToolsVersion=\"4.0\""))
         {
              s = s + Environment.NewLine + importProject;
         }
... and so on


也许有人知道很棒的方法吗?我的意思是转换。我让这个问题待一段时间再回答。静候你的评价。

关于c# - 以编程方式将现有项目添加到新的VS2012解决方案中失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11647869/

10-12 12:18