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);
}
}
}
}
WebApplication1.csprojプロジェクトはVisual Studio 2017で作成されていますか?その後、Visual Studio 2015でアプリケーションプロジェクトを開発するか、それとも逆ですか? –
@Leo:すべてVS2017で動作しています。 WebApplication1.csprojは、VS2017のデフォルトで作成されたWebアプリケーションです。このプロジェクトはこれ以上進展しませんでした。コンパイラアプリもVS2017で動作し、標準の.Net 4.6.2ライブラリを使用しています。 –
遅延返信をおかけして申し訳ありません。私はあなたのコードであなたの問題を完全に再現しました。しかし、この問題は、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でチェックすることができませんでした。 –