Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从外部.target文件指定其他引用路径_C#_Msbuild - Fatal编程技术网

C# 从外部.target文件指定其他引用路径

C# 从外部.target文件指定其他引用路径,c#,msbuild,C#,Msbuild,我有一系列的项目需要在一个连续的环境中进行调整 我将每个调整放在一个单独的.target文件中,以便在所有项目中重用此文件 在csproj文件的最后,我(在结束之前)放置了项目元素: 除非我尝试包含额外的引用路径,否则这是非常有效的 如果使用命令行指定路径(msbuild myproject.csproj/p:ReferencePath=“C:\path\to\dlls”)。该项目已完成 我的目标文件是: <Project xmlns="http://schemas.microsoft.

我有一系列的项目需要在一个连续的环境中进行调整

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

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

除非我尝试包含额外的引用路径,否则这是非常有效的

如果使用命令行指定路径(
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仍然没有被解析

如何修复它?


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

我在两次修复后解决了这个问题

  • 正确的属性不是
    AdditionalReferencePath
    ,而是
    ReferencePath
  • 我还必须将
    导入
    移动到csproj的第一个
    项目组
    之前。我想这需要在
    引用
    元素之前设置属性

  • 您可以将项目/属性组放置在目标之外,或者放置在导入到项目文件更高位置的
    .props
    文件内,或者直接放置在目标顶部/外部附近的项目文件中。也就是说,
    AdditionalReferencePath
    不在公共MSBuild属性列表中。它似乎只是团队建设的一部分(我能找到的唯一参考资料是2005-7)。您可能必须编写自己的目标,使用自己的自定义选项调用msbuild。虽然属性<代码>组件搜索路径和 AddioListBuffs<代码>可能有助于YouTube,如果您确实这样做了,请考虑使用Dealth.ProPS文件,这样您就不必为每个项目这样做了。
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
         <ItemGroup>
                <AdditionalReferencePaths Include="C:\path\to\dlls"/>            
         </ItemGroup> 
    </Project>
    
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">    
        <Target Name="SomeTarget" BeforeTargets="BeforeBuild">          
            <ItemGroup>
                <AdditionalReferencePaths Include="C:\path\to\dlls"/>              
            </ItemGroup> 
        </Target>    
    </Project>