web-dev-qa-db-ja.com

ビルトサーバー上にMicrosoft.WebApplication.targetsが見つけませんでした。

ビルドサーバーでプロジェクトをビルドしようとすると、次のようなエラーが表示されます。

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をインストールすることでこの問題を解決しました。しかし今、私は最初から新しいサーバーをセットアップしています、そして私はこの問題を解決するためのよりよい解決策があるかどうか知りたいのです。

383
stacker

質問のタイトルに答えるには(ただし、出力に関する質問には答えないでください):

次のフォルダを開発用マシンからビルドサーバにコピーすると、Webアプリケーションの場合はこれが修正されます。

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\WebApplications

あなたのビルドが壊れた方法に従ってx86を削除してください。他の種類のプロジェクトがある場合は、おそらくmsbuildフォルダ全体をコピーする必要があります。

202
Chris S

VSがインストールされていない場合、WAPの構築および公開はサポートされません。そうは言っても、あなたが本当にVSをインストールしたくない場合は、%ProgramFiles32%\MSBuild\Microsoft\の下にあるすべてのファイルをコピーする必要があります。

あなたは Web配置ツール もインストールする必要があります。それだと思います。

95

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フォルダーにコピーすることを忘れないでください。

71
Andriy K

また、NuGetパッケージ MSBuild.Microsoft.VisualStudio.Web.targets を使用して、Visual Studioプロジェクト内でそれらを参照し、参照を変更することもできます。 Andriy Kが示唆しているように。

66
Lloyd Holman

今のところ、2017年には、MSBuildToolsを使用してWebアプリケーションのリストをインストールできます。 MSBuild 2017ツールをダウンロードする このページ に移動し、インストール中にWeb development build toolsをクリックしてこれらのターゲットもインストールします。 enter image description here

これはデフォルトでC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplicationsに見つからないライブラリをインストールすることになります

56
SOReader

この記事に基づいて あなたは単にダウンロードすることができます Microsoft Visual Studio 2010シェル(統合)再配布可能パッケージ とターゲットがインストールされます。

これにより、ビルドサーバーにVisual Studioをインストールする必要がなくなります。

私は今これを試したばかりで、それが機能することを確認することができます。

前:

エラーMSB4019:インポートしたプロジェクト "C:¥Program Files(x86)¥MSBuild¥Microsoft¥VisualStudio¥v10.0¥WebApplications¥Microsoft.WebApplication.targets"が見つかりませんでした。宣言内のパスが正しいこと、およびファイルがディスク上に存在することを確認してください。

インストール後:

[正しくビルド]

明らかに、これはビルドサーバーにVisual Studioをインストールするよりもはるかに優れたソリューションです。

55
Matthew Skelton

Microsoft.WebApplication.targets用の 「Microsoft Visual Studio 2010シェル(統合型)再頒布可能パッケージ」 に加えて、上記の最新のWindows SDK Microsoft.Data.Schema.SqlTask​​s.targetsの "Microsoft Visual Studioチームシステム2008データベースエディションGDR R2" を使用すると、Visual Studio 2010をインストールする必要性が軽減されます。ただし、VS 2010のインストールは実際にはダウンロードが全体的に少なくなり、最終的に作業が少なくなります。

38
dansomething

ビルド/ CIサーバー上でビルドするときは、Microsoft.WebApplication.targetsを指定して、/p:VSToolsPath=''のインポートを完全にオフにします。これは、本質的に、次の行の条件を偽にします。

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />


これがTeamCityでのやり方です。

enter image description here

20
Alex R.

NuGetを介して依存関係を追加し、ビルドパラメータを設定する

目標:ビルドエージェントに必要な変更やインストールは不要

私はここでLloydによる NuGetアプローチにハイブリッドアプローチをとった 、これはAndrikによる コミットバイナリ依存関係ソリューションに基づいていた。

その理由は、私がこのような項目でそれらを事前設定する必要なしに新しいビルドエージェントを追加できるようにしたいということです。

  1. Visual Studioを搭載したマシンで、ソリューションを開きます。 Webプロジェクトが失敗したことを無視します。
  2. NuGetパッケージマネージャで、Lloydが述べたように、 MSBuild.Microsoft.VisualStudio.Web.targets を追加します。
  3. これはバイナリを[solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\ に解決します。
    1. これらをreferencesフォルダにコピーしてコミットすることができます。
    2. または単に彼らがいる場所でそれらを使用してください。私はこれを選びました、しかし私は後でパスのバージョン番号を扱わなければならないでしょう。

バージョン7では、次のことを行いました。これは必要ではなかったかもしれません、そしてコメントに基づいて今は絶対に必要ではありません。下記のコメントをご覧ください。

  1. 次に、TeamCityのビルド構成で、env.VSToolsPathのビルドパラメーターを追加してVSToolsPathフォルダーに設定します。私は..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPathを使いました
15
Damon

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

ソリューションソース

13
Korayem

新しいバージョンの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/

8
Huy Truong

これだけで十分です。わずか103MB。すべてをインストールしない

enter image description here

8
Simon_Weaver

私はこれを MS connect で見つけました:

はい、データベースプロジェクトをビルドするには、ビルドマシンにVisual Studio 2010をインストールする必要があります。そうすることは、Visual Studioの追加ライセンスを必要としません。

だから、これは私が今のところ持っている唯一のオプションです。

5
stacker

15.6.1にアップデートした後、私は同様の問題を抱えていて、プロジェクトをコンパイルすることができませんでした。私はMSBulildツールをインストールしなければなりませんでした、それでもエラーはそこにありました。

私はv14.0フォルダをC:\Program Files (x86)\MSBuild\Microsoft\VisualStudioからv15.0と同じフォルダにコピーすることで問題を解決することができ、それによってすべてのエラーが解決されました。それで今私のフォルダー構造は両方のフォルダーが同じ内容を含んでいる、以下のようになります。

enter image description here

2
Habib

私はたくさんの解決策を試しましたが、結局この答えは私のために働きました: https://stackoverflow.com/a/19826448/431522

基本的には、Visual Studioディレクトリではなく、MSBuildディレクトリからMSBuildを呼び出す必要があります。

スクリプトをコーディングしやすくするために、MSBuildディレクトリをパスに追加しました。

2
hendrikswan

私の解決策は、ここにいくつかの答えを組み合わせたものです。

ビルドサーバーを確認しましたが、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)が有効なパスに展開され、アプリ自体に変更を加える必要がなくなり、ビルドサーバーでのみ変更が必要になります(おそらくビルドごとにシンボリックリンクを作成できるため、この手順が失われることはない) ")。

2
Kat Lim Ruiz

追加してこれを修正しました
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"


Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

2
MonoThreaded

ビルドサーバーの場合のように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"*

これが誰かに役立つことを願っています。

0
Colin Q

もしあなたがVSTSを使ってプロジェクトをデプロイしようとしているのなら、問題は "Hosted VS2017"の代わりに "Hosted Windows Container"オプションをチェックすること(あるいは18など)に関連しているかもしれません:

enter image description here

0