首页 > 解决方案 > 从外部 .target 文件指定 AdditionalReferencePaths

问题描述

我有一堆项目需要在连续环境中进行调整。

我将每个调整都放在一个单独的 .target 文件中,以便在所有项目中重用这个文件。

在我的 csproj 文件的最后,我放了(在结束之前)Project元素:

除非我尝试包含其他参考路径,否则这工作得很好。

如果我使用命令行指定路径(msbuild myproject.csproj /p:ReferencePath="C:\path\to\dlls")。项目编译。

我的目标文件是:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- some tweaks here -->
    <PropertyGroup Condition="'$(CompileFor)' == 'SP2013'">
        <SomeProperty>some value</SomeProperty>
        <AdditionalReferencePaths>C:\path\to\dlls</AdditionalReferencePaths>
    </PropertyGroup>      
</Project>

但这不起作用(无法解析dll)。

我也试过:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     <ItemGroup>
            <AdditionalReferencePaths Include="C:\path\to\dlls"/>            
     </ItemGroup> 
</Project>

这不起作用,因为ItemGroup元素不能超出Target元素

最后,我尝试了:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">    
    <Target Name="SomeTarget" BeforeTargets="BeforeBuild">          
        <ItemGroup>
            <AdditionalReferencePaths Include="C:\path\to\dlls"/>              
        </ItemGroup> 
    </Target>    
</Project>

这仍然行不通。没有错误,我可以在构建日志中看到目标被调用,但 DLL 仍然没有解析。

如何解决?

为了提供一些上下文,我在目标文件中包含的调整允许我针对不同版本的 DLL 编译项目。该代码是第 3 方应用程序(以 SharePoint 命名)的插件,我想针对该产品的多个不同版本进行编译。使用一些条件,我可以将一个文件夹作为产品的一个版本,也可以将另一个文件夹作为产品的其他版本。

标签: c#msbuild

解决方案


经过两次修复后,我摆脱了这个问题。

  1. 正确的属性不是AdditionalReferencePath但是ReferencePath
  2. 我还必须在我Import的第一个ItemGroupcsproj 之前移动。我想这是必须在Reference元素之前设置的属性

推荐阅读