webdevqa.jp.net

Visual Studio 2012ソリューションのTeamCityのMSBuild

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.xmlVisualStudioVersion1に設定しましたか?

 <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>
71

実際、CIサーバーにVisual Studioをインストールする必要はありません。開発マシンからCIサーバー上の同じ場所にいくつかのフォルダーをコピーするだけです。

VS 2015:

  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0\Web
  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v14.0\WebApplications

VS 2013:

  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v12.0\Web
  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v12.0\WebApplications

VS 2012:

  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\Web
  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\WebApplications

VS 2010:

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

。NET 4.6:

  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6

。NET 4.5.2:

  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2

。NET 4.5.1:

  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1

。NET 4.5:

  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5

。NET 4.0.1:

  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0.1

。NET 4.0:

  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

または、 Matt推奨 のように、プロジェクトのサブディレクトリにコピーして、<MSBuildExtensionsPath32> MSBuild内の場所(通常は.csprojまたは.vbproj)ファイル。

これを行うと、プロジェクトがコンパイルされます。 VisualStudioVersionを使用しているものに明示的に設定して、正しく設定されていることを確認する必要があります。

注:このソリューションは、すべてのプロジェクトタイプ(Webプロジェクトを含む)で機能します。 Webサイト(プロジェクトファイルがない)の場合、 Windows SDK を使用している.NET SDKバージョンと一致するものをインストールすることになりました。

91
NightOwl888

本当に簡単だということがわかりました。 TeamBuildで作成されたソリューションで、MSBuildでVS2010をビルダーとして実行するには、ビルド構成の環境変数を次のように設定します。

enter image description here

Name: env.VisualStudioVersion 
Value: 10.0

Note TeamCityにVS2012をインストールする必要はありません。

52

または、必要なビルドターゲットを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の場合

  • フォルダーC:\ Dev\MyProjSln\Build\Microsoft\VisualStudio\version\WebApplications \を作成します
  • C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\version>\WebApplications \の内容を作成したフォルダーにコピーします
  • Csprojのプロジェクトノードの下のプロパティグループにMSBuildExtensionsPath32要素を追加します
  • 利益!

個人的には、ビルドサーバーがドキュメント化されていないフォルダー構造の要件に依存することを防ぎ、ソース管理に依存関係を取得するため、ビルドターゲットの依存関係を追跡するこの方法を好みます。

7
Matt

説明したとおり here

  • Nuget MSBuild.Microsoft.VisualStudio.Web.targetsをインストールします
  • .csprojファイルを編集します

交換:

<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>のパスの両方で、バージョンがケースに一致することを確認する必要があります

6
Thomas Eyde

他の開発者に影響を与える可能性があるため、プロジェクトファイルの変更にはまったく同意しません。 MSビルドフォルダーにv11.0フォルダーがなかったため、これが私にとってはうまくいきました。1)v111を作成します。

  1. C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudioにv11.0フォルダーを作成します
  2. 開発ボックス「C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0」からWebおよびWebApplicationsフォルダーをコピーします
  3. ブーム!魔法のように働く\
  4. 注:「Microsoft Visual Studio 2012 Shell(Isolated)Redistributable Package」をインストールしました
4
NoloMokgosi