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ビルドサーバーでは作成されません。だから、他の何かが古くなっているように思えますか?
もう少しグーグルで調べた後、私はつまずいた MSDNのこのスレッド 。
ここで推奨される解決策は、 Windows 10 SDK をインストールすることです。デフォルトのインストールオプションを使用してWindows Server 2012 R2を実行しているTeamCityビルドサーバーでこれを行い、再起動後、ビルドが再び機能しました。
お役に立てれば :)
「Windows 10 SDKをインストールする」という答えは正しいです-基本的に。しかし、さらなる落とし穴があります。このSDKには複数のバージョンが存在します。 https://developer.Microsoft.com/en-us/windows/downloads/sdk-archive
このコメントの執筆によって:
VS 2015の出力と、LC.exeのバージョンが呼び出されていることを確認してください。次に、ビルドサーバーに適切なSDKをインストールします。 Microsoft Build Tools 2015もインストールすることを忘れないでください。
注:私のビルドは.net 4.5をターゲットにしていますが、2015ツールを使用してTeamCityでビルドするには上記が必要です。
私の場合、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ビルドステップを追加することで、これらの問題を取り除き、生活を楽にすることもできます。
Atlassian Bambooをビルドサーバーとして使用していますが、それ以外はここで説明した問題とまったく同じ問題がありました。このスレッドですべてのソリューションを試しましたが、何も機能しませんでした。最終的に、Visual Studio 2017に付属するMSBuildの新しいバージョンを使用し、突然ライセンスdllが正しく作成されました。私の場合、MSBuild.exeは次の場所にあります。
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe
誰かに役立つかもしれません:
Windows 10 SDKをインストールしてサーバーを再起動した後、/p:VisualStudioVersion=14.0 /p:TargetFrameworkVersion=v4.5.2
私のmsbuild.exeに。私の場合、それで解決しました。
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リソースファイルにコンパイルします。
これは密接に関連していますが、ビルドを制御するためにJenkinsを使用しているという点でわずかに異なる状況です...
いくつかの変更を加える必要がありました。
/ p:Configuration = Release /p:VisualStudioVersion=14.0 /tv:14.0/verbosity:Normal
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 "