我有很多项目需要进行调整才能在连续的环境中构建。
我将所有调整放在一个单独的.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命名)的插件,我想针对该产品的几种不同版本进行编译。使用某些条件,我可以将产品的一个版本指向一个文件夹,将产品的另一个版本指向另一个文件夹。
答案 0 :(得分:0)
经过两次修复,我摆脱了这个问题。
AdditionalReferencePath
,而是ReferencePath
Import
移动到csproj的第一个ItemGroup
之前。我猜想这是必须在Reference
元素之前设置属性