问题描述
我正在尝试使用 Microsoft.Build.Execution 以编程方式构建一些应用程序,但是遇到了以下错误:
@H_502_4@未从程序集C:\ Program加载“ TransformTemplates”任务 文件(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
解决方法
作为建议,我认为您应该通过右键单击参考-> 添加参考->来参考DLL。 程序集-> 扩展->找到Microsoft.Build.Utilities.Core.dll
,然后引用它。
=============================
更新1
也许,您应该更新您的 VS2017 ,因为它不是最新版本,而我这边的新版本使用的是该dll的15.1.0.0
。>
所以我不确定您的旧版VS2017是否使用15.0.0.0
版本以及它在msbuild.exe.config
文件下使用15.0.0.0。如果没有,您应该更新您的 VS2017 。
1)或在app.config
或web.config
文件上添加绑定重定向:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="xxxxx"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
2)检查C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe.config
并确保与上述Microsoft.Build.Utilities.Core
具有相同的绑定重定向。
3),否则,您应该尝试安装Microsoft.Build 15.1.x nuget软件包和Microsoft.Build.Runtime 15.1.x nuget软件包。 然后,为其添加绑定重定向。