簡體   English   中英

從構建服務器預處理T4模板時出現FileNotFoundException

[英]FileNotFoundException when preprocessing T4 templates from build server

我正在嘗試按照Microsoft文檔“構建過程中的代碼生成”中的指示在我們的構建服務器上重建T4模板。 構建時,模板生成失敗,並顯示錯誤(完整的MSBuild輸出在此問題的后面):

錯誤MSB4018:“ TransformTemplates”任務意外失敗。

錯誤MSB4018:System.IO.FileNotFoundException:無法加載文件或程序集“ Microsoft.VisualStudio.TextTemplating.14.0,版本= 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其依賴項之一。 該系統找不到指定的文件。

我創建了一個最小的項目來重現該問題 腳本build.cmd僅執行MSBuild。 當我從工作站運行build.cmd時 ,構建成功。 它僅在構建服務器上失敗。

我嘗試過的事情:

  • 根據代碼生成文檔的指定,將MSBuild和Visual Studio程序集復制到生成服務器。

  • 將Visual Studio程序集添加到了GAC。

  • VSSDK140Install環境變量設置為“ C:\\ Program Files(x86)\\ Microsoft Visual Studio 14.0 \\ VSSDK \\”(因為這是在我的工作站上設置的方式)。

  • HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\VisualStudio\\14.0!InstallDirC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\

我試圖避免安裝Visual Studio 2015,因為這是要添加到構建服務器中的相當大的依賴項,並且Microsoft文檔明確表示這應該可行。

將程序集復制到C:\\ Program Files(x86)

我已按照代碼生成文檔中的指定將以下文件復制到構建服務器(這些文件都位於Program Files(x86)文件夾中,因為這是它們在我的計算機上的位置):

  • $(ProgramFiles)\\ MSBuild \\ Microsoft \\ VisualStudio \\ v * .0 \\ TextTemplating
    • Microsoft.VisualStudio.TextTemplating.Sdk.Host.14.0.dll
    • Microsoft.TextTemplating.Build.Tasks.dll
    • Microsoft.TextTemplating.targets
  • $(ProgramFiles)\\ Microsoft Visual Studio 14.0 \\ VSSDK \\ VisualStudioIntegration \\ Common \\ Assemblies \\ v4.0
    • Microsoft.VisualStudio.TextTemplating.14.0.dll
    • Microsoft.VisualStudio.TextTemplating.Interfaces.14.0.dll(多個文件)
    • Microsoft.VisualStudio.TextTemplating.VSHost.14.0.dll
  • $(ProgramFiles)\\ Microsoft Visual Studio 14.0 \\ Common7 \\ IDE \\ PublicAssemblies \\
    • Microsoft.VisualStudio.TextTemplating.Modeling.14.0.dll

已添加到GAC

我看到它嘗試加載Microsoft.VisualStudio.TextTemplating.14.0.dll失敗,並且由於該程序集在我的工作站上的GAC中,我猜想可能是必需的,因此我嘗試使用GAC Manager添加Microsoft.VisualStudio.TextTemplating.14.0.dll到GAC,但錯誤相同。

完整的MSBuild輸出

運行build.cmd ,得到以下輸出:

D:\TTTest>"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" ClassLibrary1.sln /t:Rebuild
Microsoft (R) Build Engine version 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 10/20/2017 11:05:16 AM.
Project "D:\TTTest\ClassLibrary1.sln" on node 1 (Rebuild target(s)).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|Any CPU".
Project "D:\TTTest\ClassLibrary1.sln" (1) is building "D:\TTTest\ClassLibrary1\ClassLibrary1.csproj" (2) on node 1 (Rebuild target(s)).
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: The "TransformTemplates" task failed unexpectedly. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.TextTemplating.14.0, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: File name: 'Microsoft.VisualStudio.TextTemplating.14.0, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost..ctor(IServiceProvider serviceProvider) [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Build.Tasks.TransformTemplatesBase.GetConfiguredTextTemplatingHost() [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:    at Microsoft.VisualStudio.TextTemplating.Build.Tasks.TransformTemplatesBase.Execute() [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:  [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: === Pre-bind state information === [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: DisplayName = Microsoft.VisualStudio.TextTemplating.14.0, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:  (Fully-specified) [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Appbase = file:///C:/Program Files (x86)/MSBuild/14.0/Bin/ [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Initial PrivatePath = NULL [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: Calling assembly : Microsoft.VisualStudio.TextTemplating.Sdk.Host.14.0, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: === [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: This bind starts in LoadFrom load context. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load(). [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Using application configuration file: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe.Config [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Using host configuration file:  [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Post-policy reference: Microsoft.VisualStudio.TextTemplating.14.0, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/14.0/Bin/Microsoft.VisualStudio.TextTemplating.14.0.DLL. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/14.0/Bin/Microsoft.VisualStudio.TextTemplating.14.0/Microsoft.VisualStudio.TextTemplating.14.0.DLL. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/14.0/Bin/Microsoft.VisualStudio.TextTemplating.14.0.EXE. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/14.0/Bin/Microsoft.VisualStudio.TextTemplating.14.0/Microsoft.VisualStudio.TextTemplating.14.0.EXE. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/TextTemplating/Microsoft.VisualStudio.TextTemplating.14.0.DLL. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/TextTemplating/Microsoft.VisualStudio.TextTemplating.14.0/Microsoft.VisualStudio.TextTemplating.14.0.DLL. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/TextTemplating/Microsoft.VisualStudio.TextTemplating.14.0.EXE. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018: LOG: Attempting download of new URL file:///C:/Program Files (x86)/MSBuild/Microsoft/VisualStudio/v14.0/TextTemplating/Microsoft.VisualStudio.TextTemplating.14.0/Microsoft.VisualStudio.TextTemplating.14.0.EXE. [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TextTemplating\Microsoft.TextTemplating.targets(396,5): error MSB4018:  [D:\TTTest\ClassLibrary1\ClassLibrary1.csproj]
Done Building Project "D:\TTTest\ClassLibrary1\ClassLibrary1.csproj" (Rebuild target(s)) -- FAILED.

Done Building Project "D:\TTTest\ClassLibrary1.sln" (Rebuild target(s)) -- FAILED.


Build FAILED.

當我查看文件Microsoft.TextTemplating.targets ,發現它使用注冊表項來查找包含dlls文件夾:

 <PropertyGroup Condition=" $(IncludeDslT4Settings)=='true' ">
<!-- Path to VS\Common7\IDE -->
<!-- Check the 32bit location first ; if that is empty, use the 64bit location. -->
<VsIdePath>$(Registry:HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\14.0@InstallDir)</VsIdePath>
<VsIdePath Condition=" $(VsIdePath) == ''" >$(Registry:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\VisualStudio\14.0@InstallDir)</VsIdePath>

<!-- Set the default location for the Dsl Designer install. -->
<DslDesignerInstallPath Condition=" $(DslDesignerInstallPath)=='' ">$(VsIdePath)Extensions\Microsoft\DSL SDK\Dsl Designer\$(VisualStudioVersion)\</DslDesignerInstallPath>

<!-- Add the standard DSL templates folder -->
<IncludeFolders>$(IncludeFolders);$(DslDesignerInstallPath)TextTemplates\</IncludeFolders>

因此,我必須在生成服務器上安裝Microsoft Visual Studio 2015 SDK和Microsoft Visual Studio 2015可視化與建模SDK,以注冊DLL。

但是, 從Visual Studio 2015開始 ,您不會從下載中心安裝Visual Studio SDK。 它作為Visual Studio安裝程序中的可選功能包括在內 因此,如果不安裝Visual Studio,就無法安裝Visual Studio SDK。 有關詳細信息,請參見Visual Studio SDK

此外,Daniel's的博客中介紹了如何在構建時轉換T4模板而不安裝Visual Studio SDK ,您可以檢查是否有幫助。

問題似乎是.NET找不到程序集Microsoft.VisualStudio.TextTemplating.14.0.dll

因此,我沒有在Visual Studio安裝它們時將所有內容保存在單獨的文件夾中,而是獲取了以下文件:

  • C:\\ Program Files(x86)\\ MSBuild \\ Microsoft \\ VisualStudio \\ v14.0 \\ TextTemplating
    • Microsoft.VisualStudio.TextTemplating.Sdk.Host.14.0.dll
    • Microsoft.TextTemplating.Build.Tasks.dll
    • Microsoft.TextTemplating.targets
  • C:\\ Program Files(x86)\\ Microsoft Visual Studio 14.0 \\ VSSDK \\ VisualStudioIntegration \\ Common \\ Assemblies \\ v4.0
    • Microsoft.VisualStudio.TextTemplating.14.0.dll
    • Microsoft.VisualStudio.TextTemplating.Interfaces.14.0.dll(多個文件)
    • Microsoft.VisualStudio.TextTemplating.VSHost.14.0.dll
  • C:\\ Program Files(x86)\\ Microsoft Visual Studio 14.0 \\ Common7 \\ IDE \\ PublicAssemblies \\
    • Microsoft.VisualStudio.TextTemplating.Modeling.14.0.dll

並將它們全部復制到MSBuild任務目錄中:

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

完成此操作后,.NET便能夠找到所需的程序集並轉換了模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM