1

我正在使用 MSBuild 构建一些 .net / C# 项目。

在我正在构建的项目中,有一些对其他 C# 项目的项目引用。

我只构建单个项目,因此我想在构建过程中将项目引用重新指向文件夹中的实际二进制文件。

我已经为我的 MSBuild 步骤将“BuildProjectReferences”设置为 False。

所以基本上我想让 MSBuild 忽略项目引用并在新目录中查找这些二进制文件。

这可能吗?这是否可能无需在构建之前动态修改项目文件?

** 更新 1 **

更多信息可能会有所帮助......我实际上是通过 Ant/AntDotNet/MSBuild 构建每个二进制文件并上传到 Artifactory。我基本上将 Ivy 的依赖管理与 .Net 二进制文件一起使用。

现在我的依赖项的上传和下载工作正常。

我唯一缺少的部分是让 MSBuild 将二进制文件作为文件依赖项而不是它在项目文件中的项目引用来查找。

** 更新 2 **

看起来 MSBuild 支持使用 XMLPoke 和 XMLPeek 编辑 csproj 文件。

所以在我的情况下,我需要在我的项目文件中更改以下内容:

<ProjectReference Include="..\MyReferencedProject\MyReferencedProject.csproj">
  <Project>{MyReferencedProjectGUID}</Project>
  <Name>MyReferencedProject</Name>
  <Private>False</Private>
</ProjectReference>

对此

<Reference Include="MyReferencedProject">
</Reference>

任何人都可以给我任何指示吗?

4

2 回答 2

0

在 Update2 上回答:您的问题与此问题相关/重复。没有简单的方法可以转换它。您应该为其编写 MSBuild 自定义任务以在构建之前更新 MSBuild 项目文件。

于 2011-12-06T06:35:15.037 回答
0

我最终将 Ant 与xmltask插件结合使用。

<target name="convert" description="convert project references to file references">
    <echo>Converting the following Project references :: ${Project.ItemGroup.ProjectReference.Name}</echo>
    <xmltask source="MyParentProject.csproj" dest="MyParentProject.csproj">
        <rename path="/:Project/:ItemGroup/:ProjectReference/:Name" to="BinaryName"/>
    </xmltask>
    <replace file="MyParentProject.csproj" token="&lt;BinaryName&gt;" value="&lt;Reference Include=&quot;"/>
    <replace file="MyParentProject.csproj" token="&lt;/BinaryName&gt;" value="&quot;&gt;&lt;/Reference&gt;"/>
    <xmltask source="MyParentProject.csproj" dest="MyParentProject.csproj">
        <copy path="/:Project/:ItemGroup/:ProjectReference/:Reference" buffer="refbuffer" append="true"/>
        <paste path="/:Project/:ItemGroup[1]" buffer="refbuffer"/>
        <remove path="/:Project/:ItemGroup/:ProjectReference" /> 
    </xmltask>
    <echo>Conversion complete.</echo>
</target>

在第一个 xmltask 中,我们将“Name”元素设置为“BinaryName”,以便我们可以找到它。

接下来我们有两个 Ant Replace 任务,它们会改变类似的东西

"<BinaryName>MyReferencedProject</BinaryName>" 

"<Reference Include="MyReferencedProject"></Reference>"

在最后一个 xmltask 中,将我们转换为文件引用的项目引用移动到通常具有文件引用的上层 ItemGroup 中。

最后我们删除 ProjectReferences 部分。

于 2011-12-06T21:44:40.647 回答