c# - 从外部 .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 命名)的插件,我想针对该产品的多个不同版本进行编译。使用一些条件,我可以将一个文件夹作为产品的一个版本,也可以将另一个文件夹作为产品的其他版本。
解决方案
经过两次修复后,我摆脱了这个问题。
- 正确的属性不是
AdditionalReferencePath
但是ReferencePath
- 我还必须在我
Import
的第一个ItemGroup
csproj 之前移动。我想这是必须在Reference
元素之前设置的属性
推荐阅读
- python - 什么时候使用 python sunder 名称?
- vba - 上次修改与 SaveDate 的 Excel VBA 工作簿属性
- blueprism - 关闭保存时的强制评论
- python - 在 Pandas 中按两列过滤数据框
- javascript - 基于 AJax 的 if 语句返回
- ubuntu - 我不小心删除了 VirtualBox 的 Ubuntu
- java - 设计模式不适用于 OnClickListener
- reactjs - Redux mapStateToProps 不起作用
- go - Go Unicode 组合字符(字素簇)和 MS Windows 控制台 cmd.exe
- docker - 两个 docker 容器之间的 EF 核心连接字符串