Visual studio 无法从Microsoft.Web.Publishing.Tasks.dll加载TransformXml任务
有人看到这个错误并知道如何修复它吗 无法从程序集C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll加载“TransformXml”任务 无法加载文件或程序集的file:///C:\程序文件(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll'或其依赖项之一。系统找不到指定的文件 确认声明正确,程序集及其所有依赖项可用,并且任务包含实现Microsoft.Build.Framework.ITask的公共类 我在别处读到,问题在于没有安装SQL Server。但我确实在SP1中安装了SQL Express 2012 x64。我也在运行VS2013专业版Visual studio 无法从Microsoft.Web.Publishing.Tasks.dll加载TransformXml任务,visual-studio,Visual Studio,有人看到这个错误并知道如何修复它吗 无法从程序集C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll加载“TransformXml”任务 无法加载文件或程序集的file:///C:\程序文件(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll'或其
我在VS 2012 express中运行了完全相同的解决方案,没有任何问题。为了让我的解决方案正常工作,我复制了我的
v10.0
文件夹,并将其重命名为v11.0
,从那时起,一切都很顺利。这是目前的快速解决方案
因为这可能不是最好的解决方案,尽管它可以工作,我本来打算尝试安装适用于Windows 7和.NET Framework 4的Microsoft Windows SDK,但下载需要很长时间。正确的答案是卸载有问题的项目,然后编辑csproj文件,查找引用10.0路径的条目,并将其改为指向11.0 只要您使用Visual Studio 2012,Dai Bok和emalamisura提供的答案就可以正常工作。 对于VS 2013,这也失败了。为了使此功能适用于所有版本的Visual Studio,您应该:
- 打开无法加载的项目的项目文件(.csproj)
- 搜索
- 将其更改为
- 重新加载项目
这将动态、正确地设置Visual Studio的正确版本。我已经在构建服务器上解决这个问题好几天了,所以我想我应该记录我得出的解决方案。首先,我的构建服务器安装了web发布扩展。我可以将TransformXml任务用于web应用程序项目中的核心内容 为了在web应用程序项目之外使用它,我尝试将UsingTask元素添加到我的项目中,并使用ms build属性将其指向正确的位置(如Benjamin所示)。但是,它们不在我的构建服务器上(那些可以轻松访问构建服务器文件系统的人可能会跳过这一步,只需将相关包安装到VisualStudio)。我甚至用硬代码编写了VisualStudio版本,但它总是把这个错误丢给我 我最终放弃了,从我的本地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
我将它们上传到源代码管理,并将该文件夹添加到构建的工作区(编辑构建定义->源代码设置->源代码管理文件夹)。从这里开始,我甚至不需要引用文件夹——下面是我的UsingTask的样子:
<UsingTask TaskName="TransformXml" AssemblyFile="Microsoft.Web.Publishing.Tasks.dll" />
现在,我可以使用TransformXml任务从任何项目中获取我内心的内容 因为我的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" />
要解决此问题
这就解决了这个问题,因为它在所提到的路径中创建了dll。您需要两件事才能使其正常工作: 1) 在构建服务器上使用选定的“Web开发构建工具”选项安装Visual Studio构建工具(您不需要整个Visual Studio,只需要VS构建工具) 2) 确保指向Microsoft.Web.Publishing.Tasks.dll的路径正确
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
适用于VS2019
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion
对我来说,它只是通过添加对NuGet包MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3的引用开始工作的
甚至不需要像包作者提到的那样将UsingTask元素添加到项目文件中
只需安装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>
$(TargetFileName).config
如果有人正在使用SDK风格的csproj,您无需在构建服务器上安装Visual Studio即可实现这一点
首先,您应该将安装到项目中。安装后,您将在SDK样式的项目中看到以下内容
<PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
全部的
运行时间;建设;本地人;内容文件;分析仪
然后确保添加GeneratePathProperty=“true”属性(见下文)。这对于下一部分非常重要,因为它将帮助您获取在您的机器上还原nuget包的路径。乔治·丹格尔在他的书中解释了这一点
全部的
运行时间;建设;本地人;内容文件;分析仪
将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>
如果你以前没用过,我建议你去看看。他们有一个VisualStudio扩展,这将使您更容易
<Target Name="AfterPublishs" AfterTargets="Publish">
<TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
</Target>