ビルドサーバーでプロジェクトをビルドしようとすると、次のようなエラーが表示されます。
Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
私は数ヶ月前に、ビルドサーバーにVisual Studio 2010をインストールすることでこの問題を解決しました。しかし今、私は最初から新しいサーバーをセットアップしています、そして私はこの問題を解決するためのよりよい解決策があるかどうか知りたいのです。
質問のタイトルに答えるには(ただし、出力に関する質問には答えないでください):
次のフォルダを開発用マシンからビルドサーバにコピーすると、Webアプリケーションの場合はこれが修正されます。
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\WebApplications
あなたのビルドが壊れた方法に従ってx86を削除してください。他の種類のプロジェクトがある場合は、おそらくmsbuildフォルダ全体をコピーする必要があります。
VSがインストールされていない場合、WAPの構築および公開はサポートされません。そうは言っても、あなたが本当にVSをインストールしたくない場合は、%ProgramFiles32%\MSBuild\Microsoft\
の下にあるすべてのファイルをコピーする必要があります。
あなたは Web配置ツール もインストールする必要があります。それだと思います。
UPD:VS2017の時点では、この問題を完全に排除するためのビルドツールのワークロードがあります。 @ SOReaderの回答 を参照してください。
ビルドサーバーで何も変更したくないが、それでもプロジェクトをソース管理外でビルドしたい場合は、必要なバイナリをソース管理下に置くことをお勧めします。プロジェクトファイルのimportsセクションを次のように修正する必要があります。
<Import Project="$(SolutionDir)\BuildTargets\WebApplications\Microsoft.WebApplication.targets" />
<Import Condition="false" Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
最初の行は、ソリューションディレクトリを基準にした新しい場所からの実際のインポートです。 2つ目は、元の行を無効にしたバージョン(Condition="false"
)です。これにより、Visual Studioでプロジェクトを有効なWebアプリケーションプロジェクトと見なすことができます(これはVS 2010 SP1自体が行うトリックです)。
ソース管理下のC:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplications
からBuildTargets
フォルダーにコピーすることを忘れないでください。
また、NuGetパッケージ MSBuild.Microsoft.VisualStudio.Web.targets を使用して、Visual Studioプロジェクト内でそれらを参照し、参照を変更することもできます。 Andriy Kが示唆しているように。
今のところ、2017年には、MSBuildToolsを使用してWebアプリケーションのリストをインストールできます。 MSBuild 2017ツールをダウンロードする このページ に移動し、インストール中にWeb development build tools
をクリックしてこれらのターゲットもインストールします。 )
これはデフォルトでC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications
に見つからないライブラリをインストールすることになります
この記事に基づいて あなたは単にダウンロードすることができます Microsoft Visual Studio 2010シェル(統合)再配布可能パッケージ とターゲットがインストールされます。
これにより、ビルドサーバーにVisual Studioをインストールする必要がなくなります。
私は今これを試したばかりで、それが機能することを確認することができます。
前:
エラーMSB4019:インポートしたプロジェクト "C:¥Program Files(x86)¥MSBuild¥Microsoft¥VisualStudio¥v10.0¥WebApplications¥Microsoft.WebApplication.targets"が見つかりませんでした。宣言内のパスが正しいこと、およびファイルがディスク上に存在することを確認してください。
インストール後:
[正しくビルド]
明らかに、これはビルドサーバーにVisual Studioをインストールするよりもはるかに優れたソリューションです。
Microsoft.WebApplication.targets用の 「Microsoft Visual Studio 2010シェル(統合型)再頒布可能パッケージ」 に加えて、上記の最新のWindows SDK Microsoft.Data.Schema.SqlTasks.targetsの "Microsoft Visual Studioチームシステム2008データベースエディションGDR R2" を使用すると、Visual Studio 2010をインストールする必要性が軽減されます。ただし、VS 2010のインストールは実際にはダウンロードが全体的に少なくなり、最終的に作業が少なくなります。
目標:ビルドエージェントに必要な変更やインストールは不要
私はここでLloydによる NuGetアプローチにハイブリッドアプローチをとった 、これはAndrikによる コミットバイナリ依存関係ソリューションに基づいていた。
その理由は、私がこのような項目でそれらを事前設定する必要なしに新しいビルドエージェントを追加できるようにしたいということです。
[solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
に解決します。バージョン7では、次のことを行いました。これは必要ではなかったかもしれません、そしてコメントに基づいて今は絶対に必要ではありません。下記のコメントをご覧ください。
env.VSToolsPath
のビルドパラメーターを追加してVSToolsPathフォルダーに設定します。私は..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath
を使いましたVisual Studio 2012を2013に移行する場合は、*。csprojプロジェクトファイルをediorで開きます。
そして 'Project'タグのToolsVersion要素をチェックしてください。
値を4.0から12.0に変更
から
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" ...
に
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" ...
またはmsbuildでビルドする場合は、単にVisualStudioVersionプロパティを指定してください。
msbuild /p:VisualStudioVersion=12.0
新しいバージョンのmsbuildはMicrosoft.WebApplication.targetsに同梱されていないようです。修正するには、csprojファイルを次のように更新する必要があります。
1)Webアプリcsprojを編集します(右クリック)。ビルドツールに関しては、csprojの一番下のセクションを見つけてください。それはそう見えるはずです。
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
2)VisualStudioVersionタグの下にVSToolsPath行を1行追加する必要があります。
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<!--Add the below line to fix the project loading in VS 2017 -->
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!--End -->
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
参照リンク: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/
これだけで十分です。わずか103MB。すべてをインストールしない
私はこれを MS connect で見つけました:
はい、データベースプロジェクトをビルドするには、ビルドマシンにVisual Studio 2010をインストールする必要があります。そうすることは、Visual Studioの追加ライセンスを必要としません。
だから、これは私が今のところ持っている唯一のオプションです。
私はたくさんの解決策を試しましたが、結局この答えは私のために働きました: https://stackoverflow.com/a/19826448/431522
基本的には、Visual Studioディレクトリではなく、MSBuildディレクトリからMSBuildを呼び出す必要があります。
スクリプトをコーディングしやすくするために、MSBuildディレクトリをパスに追加しました。
私の解決策は、ここにいくつかの答えを組み合わせたものです。
ビルドサーバーを確認しましたが、Windows7/NET4.0 SDKが既にインストールされているので、パスを見つけました。
C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets`
しかし、この行で:
<Import Project = "$(MSBuildExtensionsPath)\ Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
$(MSBuildExtensionsPath)は、C:\ Program Files\MSBuildに展開されます。パスがありません。
したがって、私がしたのは、このコマンドを使用してシンボリックリンクを作成することでした。
mklink/J "C:¥Program Files¥MSBuild¥Microsoft¥VisualStudio" "C:¥Program Files(x86)¥MSBuild¥Microsoft¥VisualStudio"
こうすることで$(MSBuildExtensionsPath)が有効なパスに展開され、アプリ自体に変更を加える必要がなくなり、ビルドサーバーでのみ変更が必要になります(おそらくビルドごとにシンボリックリンクを作成できるため、この手順が失われることはない) ")。
追加してこれを修正しました/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"
にBuild > Build a Visual Studio project or solution using MSBuild > Command Line Arguments
ビルドサーバーの場合のようにMSBuildを使用している場合、私にはうまくいきました。
以下を変更してください。
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
から:
<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
私のMsbuildのコマンドは:*"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*
これが誰かに役立つことを願っています。