C# 如何使用MSBuild将链接文件添加到csproj文件。(3.5框架)
我正在尝试使用MSBuild将链接文件添加到我的C# 如何使用MSBuild将链接文件添加到csproj文件。(3.5框架),c#,.net,xml,build,msbuild,C#,.net,Xml,Build,Msbuild,我正在尝试使用MSBuild将链接文件添加到我的.csproj文件中 这是.NETFramework 3.5(而不是4.0)。我提到这一点是因为我看到一些4.0特定的东西试图操纵XML 以下是我的开始: <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> <ItemGroup> <Re
.csproj
文件中
这是.NETFramework 3.5(而不是4.0)。我提到这一点是因为我看到一些4.0特定的东西试图操纵XML
以下是我的开始:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MySuperCoolClass.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
3.5
这就是我想要得到的:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="MySuperCoolClass.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="..\..\SomeFunFolder\MyLinkFile.ext">
<Link>MyLinkFile.ext</Link>
</Content>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
3.5
MyLinkFile.ext
我有:
MSBuild.Community.Tasks.dll
MSBuild.ExtensionPack.dll
但我非常欣赏任何指针或编码示例。您使用以下内容是否可行
using System;
using System.Text;
using Microsoft.Build.BuildEngine;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
var fullPathName = @"PathToProjectFile\Project.csproj";
Project project = new Project();
project.Load(fullPathName);
var itemGroup = project.AddNewItemGroup();
var buildItem = itemGroup.AddNewItem("Content", @"..\..\SomeFunFolder\MyLinkFile.ext");
buildItem.SetMetadata("Link", "MyLinkFile.ext");
project.Save(fullPathName, Encoding.UTF8);
}
}
}
我打开了“MSBuild.ExtensionPack.Xml.XmlFile(.cs)”的代码并四处查看。 谢天谢地,开源 我明白了…你必须“建立它”。 我不得不添加一个巫毒小把戏(下面是“MyUniqueKeyHelper123”) 我会在这里发帖。 如果您在使用“MSBuild.ExtensionPack.Xml.XmlFile(.cs)”时遇到问题,请获取源代码并查看它。您可以通过查看该方法了解如何设置属性。 一开始有点棘手,但我能理解
<PropertyGroup>
<MSBuildExtensionPackPath Condition="'$(MSBuildExtensionPackPath)' == ''">.\ExtensionPackFiles</MSBuildExtensionPackPath>
<MSBuildExtensionPackLib>$(MSBuildExtensionPackPath)\MSBuild.ExtensionPack.dll</MSBuildExtensionPackLib>
</PropertyGroup>
<UsingTask AssemblyFile="$(MSBuildExtensionPackLib)" TaskName="MSBuild.ExtensionPack.Xml.XmlFile" />
<Target Name="XmlTest01Target">
<Message Text="MSBuildExtensionPackLib = $(MSBuildExtensionPackLib)" />
<!--
The goal is:
<ItemGroup>
<Content Include="..\..\SomeFunFolder\MyLinkFile.ext">
<Link>MyLinkFile.ext</Link>
</Content>
</ItemGroup>
-->
<!-- Define a custom namespace. I used "peanut" just to show it is any name you give it -->
<ItemGroup>
<Namespaces Include="Mynamespace">
<Prefix>peanut</Prefix>
<Uri>http://schemas.microsoft.com/developer/msbuild/2003</Uri>
</Namespaces>
</ItemGroup>
<!--
Add the <ItemGroup> (new) Element. HOWEVER, since there will probably be multiple <ItemGroup> nodes, tag it with some unique identifier. Will Clean up later.
-->
<XmlFile
TaskAction="AddElement"
Namespaces="@(Namespaces)"
File=".\MyCSharpProjectFile.csproj"
Element="ItemGroup"
Key="MyUniqueKeyHelper123"
Value ="MyUniqueValueHelper123"
XPath="//peanut:Project"
/>
<!--
Add the <Content> (new) Element. With Attribute Value.
-->
<XmlFile
TaskAction="AddElement"
File=".\MyCSharpProjectFile.csproj"
Element="Content"
Key="Include"
Value ="..\..\SomeFunFolder\MyLinkFile.ext"
Namespaces="@(Namespaces)"
XPath="//peanut:Project/peanut:ItemGroup[@MyUniqueKeyHelper123='MyUniqueValueHelper123']"
/>
<!--
Add the <Content> (new) Element. With Element Value Value.
-->
<XmlFile
TaskAction="AddElement"
File=".\MyCSharpProjectFile.csproj"
Element="Link"
InnerText ="MyLinkFile.ext"
Namespaces="@(Namespaces)"
XPath="//peanut:Project/peanut:ItemGroup[@MyUniqueKeyHelper123='MyUniqueValueHelper123']"
/>
<!--
Clean up the "unique" attribute to leave clean xml.
-->
<XmlFile
TaskAction="RemoveAttribute"
File=".\MyCSharpProjectFile.csproj"
Element="Link"
Key="MyUniqueKeyHelper123"
Namespaces="@(Namespaces)"
XPath="//peanut:Project/peanut:ItemGroup[@MyUniqueKeyHelper123='MyUniqueValueHelper123']"
/>
</Target>
扩展包文件
$(MSBuildExtensionPackPath)\MSBuild.ExtensionPack.dll
花生
http://schemas.microsoft.com/developer/msbuild/2003
好吧,如果我编写了一个自定义的MSBuild任务(我在过去已经做了好几次),那么“超出了限制”。我希望在正常的.msbuild文件逻辑中执行此操作,而无需自定义任务。我非常感谢你的意见。