【发布时间】:2021-02-17 12:11:45
【问题描述】:
我正在尝试使用 Microsoft.Build.Execution 以编程方式构建一些应用程序,但是我遇到了以下错误:
“TransformTemplates”任务未从程序集 C:\Program 加载 文件 (x86)\Microsoft Visual Studio \2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.Build.Tasks.dll。 无法加载文件或程序集“Microsoft.Build.Utilities.Core, 版本 = 15.0.0.0,文化 = 中性,PublicKeyToken = b03f5f7f11d50a3a' 或其依赖项之一。系统找不到 指定的文件。确认声明是 正确,程序集及其所有依赖项都可用并且 该任务包含一个公共类,该类实现 Microsoft.Build.Framework.ITask
我的代码实现了:
Dictionary<string, string> globalProperties = new Dictionary<string, string>() {
{ "RebuildT4Templates" , "true" },
{ "VSToolsPath", @"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0" },
{ "LangVersion", "6" },
{ "ToolsVersion", "15.0" },
{ "VisualStudioVersion", "15.0" }
};
var manager = BuildManager.DefaultBuildManager;
var buildLoggger = new InMemoryBuildLogger();
var buildParameters = new BuildParameters() { Loggers = new[] { buildLoggger } };
var buildRequestData = new BuildRequestData(csProj, globalProperties, null, new[] { "Rebuild" }, null);
var buildResult = manager.Build(buildParameters, buildRequestData);
我正在尝试构建的.Csproj 文件。
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!-- Run the Transform task at the start of every build -->
<TransformOnBuild>true</TransformOnBuild>
<!-- -->
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<!-- Transform every template every time -->
<TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<!-- add AFTER import for $(MSBuildToolsPath)\Microsoft.CSharp.targets -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<ItemGroup>
<T4ParameterValues Include="BuildConfiguration">
<Value>$(Configuration)</Value>
<Visible>False</Visible>
</T4ParameterValues>
</ItemGroup>
<Target Name="CreateT4ItemListsForMSBuildCustomTool" BeforeTargets="CreateT4ItemLists" AfterTargets="SelectItemsForTransform">
<ItemGroup>
<T4Transform Include="@(CreateT4ItemListsInputs)" Condition="'%(CreateT4ItemListsInputs.Generator)' == 'MSBuild:TransformAll'" />
</ItemGroup>
</Target>
关于如何解决这个问题的任何想法?似乎 MSBuild 没有构建 T4Template 所需的依赖项
【问题讨论】:
-
您是如何在项目中引用
Microsoft.Build.Utilities.Core.dll的?它的程序集dll版本是什么?你试过使用C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Build.Utilities.Core.dll吗?
标签: c# visual-studio msbuild t4