72

TeamCityでビルドしようとしているVS2012Webプロジェクト/slnがあります。TeamCityにインストールされている.NET4.5を使用します。

TeamCityサーバーにはVS2010のみがインストールされています。

ビルドを実行すると、次のエラーが発生します。

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でVisualStudioVersion10に設定しましたが??

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

6 に答える 6

91

実際には、CIサーバーにVisualStudioをインストールする必要はありません。開発マシンから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サイト(プロジェクトファイルがない)の場合、使用している.NETSDKのバージョンと一致するWindowsSDKをインストールすることになりました。これは、レジストリキーが欠落しているため、ビルドされないためです。

于 2013-10-14T00:05:41.163 に答える
51

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

ここに画像の説明を入力してください

Name: env.VisualStudioVersion 
Value: 10.0

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

于 2013-03-15T15:56:44.490 に答える
7

または、必要なビルドターゲットを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要素を追加します
  • 利益!

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

于 2014-07-31T14:56:53.690 に答える
6

ここで説明されているように:

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

于 2013-12-12T16:41:45.773 に答える
4

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

  1. C:\ Program Files(x86)\ MSBuild \ Microsoft\VisualStudioにv11.0フォルダーを作成します
  2. 開発ボックス「C:\ ProgramFiles(x86)\ MSBuild \ Microsoft \ VisualStudio\v11.0」からWebフォルダーとWebApplicationsフォルダーをコピーします。
  3. ブーム!魅力のように働く\
  4. 注:「MicrosoftVisual Studio 2012シェル(分離)再配布可能パッケージ」をインストールしました
于 2014-03-14T09:51:47.707 に答える
-1

まず、TeamCityは、ビルドするためにどのバージョンのVisualStudioも存在する必要はありません。プロジェクトのビルドステップがMSBuildランナーで構成されている場合、TeamCityは使用するMSBuildのバージョンを知る必要があります。これはビルドステップの設定です。ビルドマシンにインストールされている.NETツールに従って、ビルドステップ構成で適切なMSBuildバージョンを選択する必要があります。TeamCityはその値を使用して場所のパスを決定し、MSBuildを呼び出すときに環境変数を設定します。

Visual Studio 2012/2013の問題は、8.1.0以降のTeamCityでのみサポートされていることです。したがって、TeamCityのバージョンが8.1より前の場合。MSBuild Tools 2013の設定を表示するには、最新の8.1.xにアップグレードする必要があります。ビルドステップの設定で適切なMSBuildバージョンを選択すると、問題は解消されます。詳細については、こちらをお読みください:http: //blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html

于 2014-07-24T15:48:43.847 に答える