TeamCityでビルドしようとしているVS 2012 Webプロジェクト/ slnがあります。 TeamCityにインストールされている.NET 4.5を使用します。
TeamCityサーバーにはVS 2010のみがインストールされていますがあります。
ビルドの実行時にこのエラーが発生します。
C:\BuildAgent\work\d5bc4e1b8005d077\CUSAAdmin.Web\CUSAAdmin.Web.csproj(799, 3):
error MSB4019:
The imported project
"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.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. Project CUSAAdmin.Web\CUSAAdmin.Web.csproj failed.
Project CUSAAdmin.sln failed.
Visual Studio 2012(v11.0)を使用してビルドしようとしています。
build.xmlでVisualStudioVersionを1に設定しましたか?
<Target Name="BuildPackage">
<MSBuild Projects="CUSAAdmin.sln" ContinueOnError="false"
Targets="Rebuild"
Properties="Configuration=$(Configuration); VisualStudioVersion=10.0" />
プロジェクト内でも同様に、VS2010がデフォルトになっています
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath
Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
実際、CIサーバーにVisual Studioをインストールする必要はありません。開発マシンからCIサーバー上の同じ場所にいくつかのフォルダーをコピーするだけです。
VS 2015:
VS 2013:
VS 2012:
VS 2010:
。NET 4.6:
。NET 4.5.2:
。NET 4.5.1:
。NET 4.5:
。NET 4.0.1:
。NET 4.0:
または、 Matt推奨 のように、プロジェクトのサブディレクトリにコピーして、<MSBuildExtensionsPath32>
MSBuild内の場所(通常は.csproj
または.vbproj
)ファイル。
これを行うと、プロジェクトがコンパイルされます。 VisualStudioVersionを使用しているものに明示的に設定して、正しく設定されていることを確認する必要があります。
注:このソリューションは、すべてのプロジェクトタイプ(Webプロジェクトを含む)で機能します。 Webサイト(プロジェクトファイルがない)の場合、 Windows SDK を使用している.NET SDKバージョンと一致するものをインストールすることになりました。
本当に簡単だということがわかりました。 TeamBuildで作成されたソリューションで、MSBuildでVS2010をビルダーとして実行するには、ビルド構成の環境変数を次のように設定します。
Name: env.VisualStudioVersion
Value: 10.0
Note TeamCityにVS2012をインストールする必要はありません。
または、必要なビルドターゲットをc:\ Program Files(x86)\ MSBuildからプロジェクトのサブディレクトリ(..Buildなど)にコピーして、構造を保持し、csprojに次を追加します。
<!-- redirect msbuild path so targets can be added to source control -->
<PropertyGroup>
<MSBuildExtensionsPath32>..\Build\</MSBuildExtensionsPath32>
</PropertyGroup>
たとえば、プロジェクトのルートがC:\ Dev\MyProjSln\MyProjの場合
個人的には、ビルドサーバーがドキュメント化されていないフォルダー構造の要件に依存することを防ぎ、ソース管理に依存関係を取得するため、ビルドターゲットの依存関係を追跡するこの方法を好みます。
説明したとおり here :
MSBuild.Microsoft.VisualStudio.Web.targets
をインストールします交換:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
で:
<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />
明らかに、インストールされているnugetと<Import>
のパスの両方で、バージョンがケースに一致することを確認する必要があります
他の開発者に影響を与える可能性があるため、プロジェクトファイルの変更にはまったく同意しません。 MSビルドフォルダーにv11.0フォルダーがなかったため、これが私にとってはうまくいきました。1)v111を作成します。