C# MSBuild.ExtensionPack的MSBuildProjectDirectory未解析
我正在从事一个ASP.NET4WebAPI项目,并包含一个wpp.targets文件。我需要使用MSBuild.ExtensionPack.Xml.XmlFile替换我的一个配置Xml文件中的值 问题是我不想在所有机器上安装MSBuild.ExtensionPack,所以我将其与项目打包在一起。在本地生成中,指向MSBuild.ExtensionPack.dll的路径解析正确。但是,在我的生成计算机上,我一直遇到以下错误:C# MSBuild.ExtensionPack的MSBuildProjectDirectory未解析,c#,asp.net,asp.net-web-api,msbuild,C#,Asp.net,Asp.net Web Api,Msbuild,我正在从事一个ASP.NET4WebAPI项目,并包含一个wpp.targets文件。我需要使用MSBuild.ExtensionPack.Xml.XmlFile替换我的一个配置Xml文件中的值 问题是我不想在所有机器上安装MSBuild.ExtensionPack,所以我将其与项目打包在一起。在本地生成中,指向MSBuild.ExtensionPack.dll的路径解析正确。但是,在我的生成计算机上,我一直遇到以下错误:无法从程序集C:\Program Files(x86)\MSBuild\E
无法从程序集C:\Program Files(x86)\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.dll加载“MSBuild.ExtensionPack.Xml.XmlFile”任务。
它似乎正在解析为包的默认安装位置
以下是我的wpp.targets文件中的内容:
<?xml version="1.0" encoding="utf-8"?>
$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.tasks
$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.tasks
当您有一个以上的帮助程序dll源位置选项时……我喜欢使用下面的样式 类似这样的东西(显然,你必须为“可能的定位单”和“可能的定位单”输入真实的位置)
..\PossibleLocationOne\MSBuild.ExtensionPack.dll
..\possibleLocationWO\MSBuild.ExtensionPack.dll
找不到\u MSBUILDEXENSIONPACK\MSBuild.ExtensionPack.dll的\u路径\u
为可能的位置添加所有选项…并为“我没有找到匹配项”添加一个额外选项
然后使用“UsingTask”
“UsingTask”是~~在~~ MyFoundMSBuildExtensionPackLocation(PropertyGroup)…..之后,$(MyFoundMSBuildExtensionPackLocation)在调用UsingTask之前解析
<!-- Sets the assembly which will run the transformation on Web.config (Should be installed on Dev machines) -->
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<!-- Get the path to the MSBuild.Extension.Pack -->
<PropertyGroup>
<TPath>$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.tasks</TPath>
<TPath Condition="Exists('$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.tasks')">$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.tasks</TPath>
</PropertyGroup>
<!--Import the MSBuild.Extension.Pack package -->
<Import Project="$(TPath)"/>
<!-- Make sure web.config and transformation files exist -->
<Target Name="ConfigurationTransform" BeforeTargets="BeforeBuild" Condition="Exists('Web.config')" />
<Target Name="ConfigurationTransform" BeforeTargets="BeforeBuild" Condition="Exists('Web.$(Configuration).config')" />
<!-- Make sure web.config will be there even for package/publish -->
<Target Name="CopyWebConfig" BeforeTargets="Build;Rebuild">
<Copy SourceFiles="Web.Base.config"
DestinationFiles="Web.config"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>
<!-- Run Web.Config transformation on a build as well (not just a publish) -->
<Target Name="CustomTransformWebConfigOnBuild" AfterTargets="CopyWebConfig" >
<Message Text="Transforming: Web.$(Configuration).config" Importance="high" />
<TransformXml Source="Web.Base.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
<!-- Update Web.Config's config attribute -->
<Target Name="UpdateConfigAttribute" AfterTargets="CustomTransformWebConfigOnBuild" Condition="$(Configuration) != 'Release'">
<Message Text="Transforming: Web.config" Importance="high" />
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="UpdateAttribute"
File="Web.config"
XPath="/configuration/appSettings/add[@key='config_url']"
Key="value"
Value="www.randomurl.com"/>
</Target>
<PropertyGroup>
<MyFoundMSBuildExtensionPackLocation Condition="Exists('..\PossibleLocationOne\MSBuild.ExtensionPack.dll')">..\PossibleLocationOne\MSBuild.ExtensionPack.dll</MyFoundMSBuildExtensionPackLocation>
<MyFoundMSBuildExtensionPackLocation Condition="Exists('..\PossibleLocationTwo\MSBuild.ExtensionPack.dll')">..\PossibleLocationTwo\MSBuild.ExtensionPack.dll</MyFoundMSBuildExtensionPackLocation>
<!--Now check to see if either of the two above resolved , if not , add something to the path so you can at least -->
<MyFoundMSBuildExtensionPackLocation Condition="'$(MyFoundMSBuildExtensionPackLocation)'==''">DID_NOT_FIND_A_PATH_FOR_MSBUILDEXENSIONPACK\MSBuild.ExtensionPack.dll</MyFoundMSBuildExtensionPackLocation>
</PropertyGroup>
<UsingTask AssemblyFile="$(MyFoundMSBuildExtensionPackLocation)" TaskName="TransformXml"/>