2017-04-07 10 views
1

Visual Studio 2017で新しく追加された標準のASP(MVC)Webアプリケーションをプログラムでビルドしたいと思います。したがって、Microsoft.Build.Evaluation.Project.Build ()を押してプロジェクトを開いてコンパイルします。 ビルドするコンソールアプリケーションの概要を以下に示します。ビルドする必要のあるプロジェクトは、Visual Studioのウィザードから生成された標準のASP MVC .Netアプリケーションです。私のVisual Studioバージョン2017では、これはうまくコンパイルされます。プログラムでC#webapplicationsプロジェクトをビルドすると、プロジェクトを開くときにエラーが発生する

Microsoft.Build.Exceptions.InvalidProjectFileExceptionが発生した HRESULT = 0x80131500 メッセージ=インポートされたプロジェクト「C:しかし、私はプロジェクトのオープニングで、自分のアプリケーションを使用して、それをコンパイルしたい場合は、それがエラーを思い付きます:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ WebApplications \ Microsoft.WebApplication.targets "が見つかりませんでした。宣言内のパスが正しいこと、およびファイルがディスク上に存在することを確認します。 \ webアプリケーションのMicrosoft \

プロジェクトのインポート= "$(VSToolsPath):メモ帳でwebアプリケーションのcsprojファイルを開いた場合

さて、それはそれがでプロジェクトをインポートしています見つけたいことを示しています.WebApplication.targets "条件= " '$(VSToolsPath)' = ''"

toolspathがあるように私には思えるエラーTOTよると、" C:\プログラムファイル(x86の)\ MSBuildの\マイクロソフト\ VisualStudio \ v15.0 " ただし、WebApplications \ Microsoft.WebApplication.targe "C:¥Program Files(x86)¥MSBuild¥Microsoft¥VisualStudio¥v14.0"にあります。

WebApplicationsフォルダをv14.0からv15.0にコピーしてください。その後、幸せにコンパイルされます。しかし、質問は次のとおりです。 標準生成プロジェクトがexwistではないディレクトリを指しているのはなぜですか? Visual Studio自体がこの間違ったパスに対処できるのはなぜですか? WebApplicationsフォルダをコピーするよりも優れたソリューションがありますか?ここで

は、Webプロジェクトを開き、コンパイルしたコードです:

using System; 
using Microsoft.Build.Logging; 


namespace CompilerApp 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     //string projectfile = @"C:\temp\CompilerApp\MyCSharp7\MyCSharp7.csproj"; 

     string projectfile = @"C:\temp\CompilerApp\WebApplication1\WebApplication1.csproj"; 
     UnloadAnyProject(); 
     Microsoft.Build.Evaluation.Project p = new Microsoft.Build.Evaluation.Project(projectfile); 
     FileLogger loggerfile2 = new FileLogger(); 
     loggerfile2.Parameters = @"logfile=C:\temp\CompilerApp\myapp.msbuild.log"; 
     bool buildresult = p.Build(loggerfile2); 
     if (buildresult) 
     { 
      Console.WriteLine("project compiled"); 
     } 
     else 
     { 
      Console.WriteLine("project not compiled, check {0}", @"C:\temp\myapp.msbuild.log"); 

     } 
     p.Save(); 
     UnloadAnyProject(); 


    } 

    private static void UnloadAnyProject() 
    { 
     Microsoft.Build.Evaluation.ProjectCollection projcoll = Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection; 

     foreach (Microsoft.Build.Evaluation.Project pr in projcoll.LoadedProjects) 
     { 
      Microsoft.Build.Evaluation.ProjectCollection mypcollection = pr.ProjectCollection; 
      mypcollection.UnloadProject(pr); 
     } 
    } 
} 
} 
+0

WebApplication1.csprojプロジェクトはVisual Studio 2017で作成されていますか?その後、Visual Studio 2015でアプリケーションプロジェクトを開発するか、それとも逆ですか? –

+0

@Leo:すべてVS2017で動作しています。 WebApplication1.csprojは、VS2017のデフォルトで作成されたWebアプリケーションです。このプロジェクトはこれ以上進展しませんでした。コンパイラアプリもVS2017で動作し、標準の.Net 4.6.2ライブラリを使用しています。 –

+0

遅延返信をおかけして申し訳ありません。私はあなたのコードであなたの問題を完全に再現しました。しかし、この問題は、Visual Studio 2015およびVisual Studioのコンパイル後には発生しませんでした。さらに調査したところ、 "Microsoft.Build.Evaluation.Project"のプロジェクトクラスがVisual Studio 2017の正しいパスを読み取っていないことがわかりました.VS2017のツールパスはC:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ VisualStudio \ v15.0ですが、そのプロジェクトクラスのソースコードをILSpyでチェックすることができませんでした。 –

答えて

0

はなぜexsistないディレクトリを指す標準生成されたプロジェクトのですか?なぜVisual Studio自体がこの間違ったパスに対処できますか? WebApplicationsフォルダをコピーするよりも優れたソリューションはありますか?

私はあなたのコードであなたの問題を完全に再現しました。しかし、この問題は、Visual Studio 2015では同じスクリプトを使って発生せず、Visual Studioはテスト後にコンパイルされました。

「Microsoft.Build.Evaluation.Project」のプロジェクトクラスがVisual Studio 2017の正しいパスを読み取っていないことがわかりました。VS2017のツールパスはC:\ Program Files(x86)である必要があります。 \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ VisualStudio \ v15.0ですが、ILSpyを使用してそのプロジェクトクラスのソースコードを確認することはできませんでした。

この問題はVisual Studio Developer Communityに報告しています(寄稿いただきありがとうございます)。あなたのコメントに続き、この問題のフィードバックを確認することができます。私もこの問題をフォローアップし、この問題の最新の状況をお送りします。

https://developercommunity.visualstudio.com/content/problem/45156/the-project-class-of-microsoftbuildevaluationproje.html

が、これはあなたを助けることができる願っています。

関連する問題