有没有人看过这个错误并知道如何修复它?
无法从程序集C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll加载“TransformXml”任务。
无法加载文件或程序集'file:/// C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll'或其中一个依赖。该系统找不到指定的文件。
确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类。
我在其他地方读过,问题是当你没有安装SQL Server时。但我确实安装了带有SP1的SQL Express 2012 x64。我也在运行VS 2013 Professional。
我在VS 2012 Express中运行了这个完全相同的解决方案,没有任何问题。
答案 0 :(得分:137)
只要您使用Visual Studio 2012,Dai Bok和emalamisura提供的答案就可以正常工作。 对于VS 2013,这也失败了。为了使这适用于所有版本的Visual Studio,您应该:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
这将动态且正确地设置正确的Visual Studio版本。
答案 1 :(得分:29)
为了让我的工作,我只是复制了我的v10.0
文件夹并将其重命名为v11.0
,从那时起事情似乎运作良好。这是现在的快速解决方案。
由于这可能不是最好的解决方案,虽然它可行,但我打算尝试安装适用于Windows 7和.NET Framework 4的Microsoft Windows SDK for Windows 7 and .NET Framework 4 Windows SDK,但需要很长时间才能下载。
答案 2 :(得分:8)
我已经在我们的构建服务器上解决了这个问题好几天了,所以我想我记录了我的解决方案。首先,我的构建服务器安装了Web发布扩展。我可以将TransformXml任务用于Web应用程序项目中的内容。
要在Web应用程序项目的外部使用它,我尝试将UsingTask元素添加到我的项目中,并使用ms构建属性将其指向正确的位置(正如Benjamin演示的那样)。但是,它们不在我的构建服务器上(那些可以轻松访问构建服务器的文件系统的人可能会跳过这个,只需将相关的软件包安装到Visual Studio)。我甚至甚至硬编码视觉工作室版本,但它总是把这个错误丢给我。
我终于放弃了,从本地PC上取下了DLL:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.XmlTransform.dll
我将它们上传到源代码管理,并将该文件夹添加到我的构建工作区(编辑构建定义 - &gt;源设置 - &gt;源代码管理文件夹)。从那里开始,我甚至不需要引用该文件夹 - 这就是我的UsingTask的样子:
<UsingTask TaskName="TransformXml" AssemblyFile="Microsoft.Web.Publishing.Tasks.dll" />
现在,我可以将TransformXml任务用于我心中的任何项目内容。
答案 3 :(得分:5)
因为我的VisualStudio文件夹中只有v12.0,v14.0和v15.0,所以我编辑项目文件并将参考路径从v10.0更改为v14.0。然后项目成功构建。
之前:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
后:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
答案 4 :(得分:4)
要解决此问题,
这解决了问题,因为它在上述路径中创建了dll。
答案 5 :(得分:2)
对此的正确答案是卸载有问题的项目,然后编辑csproj文件,查找引用10.0路径的条目,并将其更改为指向11.0。
答案 6 :(得分:1)
对于VS2019
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion
我将MSBuildToolsVersion
替换为VisualStudioVersion
。
答案 7 :(得分:1)
对我来说,它只是通过添加对NuGet包MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3的引用而开始工作
甚至不需要像包作者提到的那样将UsingTask元素添加到项目文件中
https://github.com/pdonald/nuget-webtargets
只需安装NuGet软件包。套件会自动设定 $(VSToolsPath)属性以使用tools文件夹中的目标文件。
然后我就可以使用包中定义的TransformXml和其他任务来转换app.config
<Target Name="app_config_AfterCompile" AfterTargets="AfterCompile" Condition="Exists('app.$(Configuration).config')">
<!--Generate transformed app config in the intermediate directory-->
<TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
<!--Force build process to use the transformed configuration file from now on.-->
<ItemGroup>
<AppConfigWithTargetPath Remove="App.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
答案 8 :(得分:0)
你需要两件事才能使它发挥作用:
1)使用选定的&#34; Web开发构建工具&#34;安装Visual Studio构建工具(您不需要整个Visual Studio,只需要VS构建工具)。构建服务器上的选项 https://www.visualstudio.com/pl/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
2)确保Microsoft.Web.Publishing.Tasks.dll的路径正确
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
答案 9 :(得分:0)
只要有人使用SDK风格的csproj,就可以实现此目的而不必在构建服务器上安装Visual Studio。
首先,您应该将SlowCheetah nuget package安装到项目中。安装后,您将在SDK风格的项目中看到以下内容。
<PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
然后确保添加 GeneratePathProperty =“ true” 属性(请参见下文)。这对于下一部分非常重要,因为它将帮助您掌握nuget软件包在计算机上的还原路径。乔治·丹格尔(George Dangl)在他的article here中对此进行了解释。
<PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
将SlowCheetah目标导入您的项目:
<Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
您现在可以使用目标命令(在本例中为发布后)来应用一些自定义转换。如果需要,您始终可以对下面的文件名进行硬编码,而不必在下面的示例中使用变量。
<Target Name="AfterPublishs" AfterTargets="Publish">
<TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
</Target>
如果您以前没有使用过SlowCheetah,建议您检查一下。它们具有Visual Studio扩展,可让您更轻松地预览变换文件。
答案 10 :(得分:0)
提供的解决方案似乎适用于将 VS 用作 IDE,但如果您通过 CLI 或在基于 Unix 的系统上使用 DotnetCore,则这不起作用。
我发现以下似乎有效
<PropertyGroup>
<XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' == 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net5.0/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
<XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' != 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net472/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
<XmlTransformDllPath Condition="!Exists($(XmlTransformDllPath))">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll</XmlTransformDllPath>
</PropertyGroup>
<UsingTask TaskName="TransformXml" AssemblyFile="$(XmlTransformDllPath)" />
这个解决方案考虑了netcore,完整的.net
出于某种原因,使用 CLI 与 VS2019 时,Windows 上的 MSBuildSDKsPath
和 MSBuildExtensionsPath32
不同
命令行界面:
MSBuildSDKsPath = C:\Program Files\dotnet\sdk\5.0.103\Sdks
MSBuildExtensionsPath32 = C:\Program Files\dotnet\sdk\5.0.103
Vs2019
MSBuildSDKsPath = C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Sdks
MSBuildExtensionsPath32 = C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild
在我的 Mac 上返回 /usr/local/share/dotnet/sdk/5.0.201
我看到的唯一问题是名称的 tools/net5.0
部分会在发布时发生变化
还创建了 https://github.com/dotnet/sdk/issues/16469 并在 The "TransformXml" task was not found (error MSB4036) on TeamCity build 上回答了这个问题