2

ウィザードには、既存のプロジェクトを新しいソリューションに追加するための次のコードがあります。

//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 では失敗します (2 番目のパラメーターで実験しました)。

System.Runtime.InteropServices.COMException (0x80004004): 操作が中止されました (HRESULT からの例外: 0x80004004 (E_ABORT)) EnvDTE.SolutionClass.AddFromFile (String FileName、Boolean Exclusive) at Wizard.Generator.NewProjectGenerator.Generate (Action`1 logMessage) Wizard.Forms.WizardForm.Finish() で

このエラーの後、新しいプロジェクトを手動でソリューションに追加すると、すべて正常に動作します。しかし、「申し訳ありませんが、新しく生成されたプロジェクトを追加することはできませんので、自分で追加してください」とは言えません。

MSDN は次のことを提案しています。

実行中にウィザードの UI を非表示にする場合は、AddFromFile ではなく LaunchWizard メソッドを使用してウィザードを実行できます。LaunchWizard には、UI を無効にできるパラメーターがあります。

ただし、この方法ではウィザード ファイルが必要になるため、解決策にはなりません。

誰か助けてくれませんか?ウィザードは、「新規 -> プロジェクト」メニューから実行されます。

4

1 に答える 1

0

ここで問題の回避策(私の上司が提案):

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

多分誰かがそれを素晴らしい方法を知っていますか?つまり、変換します。しばらくの間、質問は未回答のままにします。あなたのコメントを待っています。

于 2012-07-26T11:11:36.863 に答える