可以通过批处理文件以编程方式删除和添加对csproj的引用吗?

我正在编写一个简短的批处理文件来准备一个带有Examples项目的控件库DLL,以便通过sip文件进行部署,并提出以下问题。

给定已知位置的csproj文件和已知位置的DLL,是否可以以编程方式从批处理文件(通过第三方命令行exe或其他脚本)更新csproj以添加新DLL?

我的文件夹结构是

/Build /SDK /WPF /4.0 : ControlLibrary.dll sits here /Examples /WPF /4.0 : Examples.csproj sits here 

假设批处理文件处于/ Build级别,有没有办法修改Examples.csproj以引用ControlLibrary.dll?

只是为了澄清,我之所以有这样的结构是因为我希望部署一个示例csproj来附带我的控件库。 Examples.csproj应该引用SDK /下的混淆控件库。 examples.csproj也存在于dev trunk(它已被复制)上,并且在开发解决方案中它引用了非混淆forms的ControlLibrary.csproj的输出。

基本上我在这里创建的是一个文件夹结构,用于压缩和发送ControlLibrary以及示例,因此需要更新引用。

更新 – 使用Powershell解决

请参阅使用Powershell 添加和删​​除引用的相关问题和答案

csproj文件是XML文件 – 您可以轻松编写命令行应用程序来操作这些文件(添加,删除节点等)。

您可以从批处理文件中调用此类命令行应用程序。

您可以在以下位置找到此文件的架构:

 %windir%\Microsoft.NET\Framework\[framework version]\Microsoft.Build.xsd 

如本SO答案所述 。

我不明白你为什么需要在你的情况下修改csproj文件。 只需确保csproj文件中的库引用是相对的,即..\..\..\SDK\WPF\4.0\ControlLibrary.dll ,即使将整个文件夹层次结构移动到新位置,它也能保持正常工作。

如果您正在尝试简化将库添加到新项目中,请查看NuGet 。 这是分发和部署库的最佳方式。