web-dev-qa-db-ja.com

* TeamCityのmsbuildで作成されないobjディレクトリの.dll.licensesファイル

TeamCityプロジェクトのVS2012からVS2015へのアップグレードに取り組んでいますが、MVCアプリケーションのコンパイルで問題が発生しています。

古いMSBuild(v4.0.30319.34209)は、MyApplication.Web.Mvc.dll.licensesという名前のobjディレクトリにファイルを生成します。これはビルドに必要なようですが、ファイルが実際に何に使用されているのかわかりません。

新しいMSBuild(v14.0.23107.0)はこのMyApplication.Web.Mvc.dll.licensesファイルを作成しないため、ビルドは次のエラーで失敗します。

CSC error CS1566: Error reading resource 'MyApplication.Web.Mvc.dll.licenses' 
-- 'Could not find file 'C:\BuildAgent\work\58ddf5f1234d8c8a\application\MyApplication\MyApplication.Web.Mvc\obj\Release\MyApplication.Web.Mvc.dll.licenses'.' 

マシンでcmdを使用して手動でビルドを実行しており、新しいmsbuildファイルではなく、古いmsbuildを使用してビルドを実行するたびにdll.licensesファイルが作成されます。

ファイルは、VS2015を実行している開発マシンで作成されますが、Teamcityビルドサーバーでは作成されません。だから、他の何かが古くなっているように思えますか?

47
gwin003

もう少しグーグルで調べた後、私はつまずいた MSDNのこのスレッド

ここで推奨される解決策は、 Windows 10 SDK をインストールすることです。デフォルトのインストールオプションを使用してWindows Server 2012 R2を実行しているTeamCityビルドサーバーでこれを行い、再起動後、ビルドが再び機能しました。

お役に立てれば :)

38
Njål Nordmark

「Windows 10 SDKをインストールする」という答えは正しいです-基本的に。しかし、さらなる落とし穴があります。このSDKには複数のバージョンが存在します。 https://developer.Microsoft.com/en-us/windows/downloads/sdk-archive

このコメントの執筆によって:

  • 2015年7月(バージョン10.0.26624.0)には.NET Framework 4.6 SDKが含まれています
  • 2015年11月(バージョン10.0.10586.212)には.NET Framework 4.6.1 SDKが含まれています
  • 2016年8月(バージョン10.0.14393.0)には.NET Framework 4.6.2 SDKが含まれています

VS 2015の出力と、LC.exeのバージョンが呼び出されていることを確認してください。次に、ビルドサーバーに適切なSDKをインストールします。 Microsoft Build Tools 2015もインストールすることを忘れないでください。

注:私のビルドは.net 4.5をターゲットにしていますが、2015ツールを使用してTeamCityでビルドするには上記が必要です。

10

私の場合、TFSはライセンスコンパイラを使用していましたlc.exe古いSDKフォルダーから

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\lc.exe

の代わりに

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\LC.exe

この問題は、ビルド定義に次のmsbuild引数を追加することで解決しました。

/p:FrameworkOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2"

ビルドサーバーにvisual studioをインストールし、2015 msbuildステップに代わるvisual studioビルドステップを追加することで、これらの問題を取り除き、生活を楽にすることもできます。

8
Orlando

Atlassian Bambooをビルドサーバーとして使用していますが、それ以外はここで説明した問題とまったく同じ問題がありました。このスレッドですべてのソリューションを試しましたが、何も機能しませんでした。最終的に、Visual Studio 2017に付属するMSBuildの新しいバージョンを使用し、突然ライセンスdllが正しく作成されました。私の場合、MSBuild.exeは次の場所にあります。

C:\ Program Files(x86)\ Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe

6
Tom

誰かに役立つかもしれません:

Windows 10 SDKをインストールしてサーバーを再起動した後、/p:VisualStudioVersion=14.0 /p:TargetFrameworkVersion=v4.5.2私のmsbuild.exeに。私の場合、それで解決しました。

1
user1613512

VisualBuildでビルドするときにも同じ問題が発生しました。 Win10 SDKをインストールせずに解決策を見つけました。

プロジェクトプロパティのコンパイル設定に、次のような「ビルド前のイベントコマンドライン」を追加しました。

pushd "%VS120COMNTOOLS%..\..\VC"
call vcvarsall.bat
popd
pushd $(ProjectDir)\"My Project"
lc /target:$(TargetFileName) /complist:licenses.licx /outdir:"..\obj\$(ConfigurationName)"
popd
popd

このコマンドは、(古い)VS12ツールを使用し、プロジェクトのビルドの前に手動でlcコンパイラツールを起動し、licenses.licxファイルを* .licensesリソースファイルにコンパイルします。

1
Josef Haslinger

これは密接に関連していますが、ビルドを制御するためにJenkinsを使用しているという点でわずかに異なる状況です...

いくつかの変更を加える必要がありました。

  1. ビルドサーバーにWindows 10 SDKをインストールしました。私の場合、SDKをインストールすると、MSBuildが* .dll.licensesファイルを生成しなかったという根本的なエラーが「明らかに」なりました。
  2. ビルドパラメーターに/tv:14.0(/ToolsVersion:14.0)を追加しました。

/ p:Configuration = Release /p:VisualStudioVersion=14.0 /tv:14.0/verbosity:Normal

  1. MSBuildステップを実行する前のステップとして、ライセンスファイルを手動で作成しました。次のコマンドは、ファイル「myproject.dll.licenses」を作成します。

cd "C:\ Program Files(x86)\ Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools"

。\ lc.exe /target:MyProject.dll/complist: "C:\ Program Files(x86)\ Jenkins\jobs\MyProject\workspace\MyProject\licenses.licx"/i: "C:\ Program Files\nsoftware\E-Payment Integrator V6 .NET Edition\lib\nsoftware.InPayWeb.dll "/ outdir:" C:\ Program Files(x86)\ Jenkins\jobs\MyProject\workspace\MyProject\obj\Release "

0