.NET Core - 构建项目指定 ReferencePath
Posted
技术标签:
【中文标题】.NET Core - 构建项目指定 ReferencePath【英文标题】:.NET Core - build project specifying ReferencePath 【发布时间】:2018-10-08 00:37:51 【问题描述】:我有一个适用于 .NetCore 平台的 .csproj 和经典参考资料。我正在为开发环境使用hintpath
属性。但我应该在 CI 环境中构建 csproj,其中引用的程序集放置在不同的目录中。
在经典的 net4 上,我为 MSBuild 工具使用了 /p:ReferencePath
参数。
但是“dotnet build”没有类似的说法。
作为后备,我找到了“dotnet msbuild”命令,但这个工具忽略了/p:ReferencePath=xxx
参数并显示给我
警告 MSB3245:无法解析此引用。找不到程序集“AssemblyName”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,则可能会出现编译错误。
请指导我,我可以检查什么,dotnet-build/dotnet-msbuild 工具在哪里搜索引用的程序集以及如何指定该目录?
【问题讨论】:
【参考方案1】:-
您仍然可以使用 MSBUILD 在解决方案中构建 .net CORE/Standard 项目。
这似乎是我向 Microsoft 报告的一个错误(这与核心/标准无关,而是新项目文件格式)
referencePath
被新项目文件格式忽略。
将 /t:restore
与构建目标一起添加到 msbuild 命令中,这样它将同时恢复和构建。
针对您的 CI/Build 服务器情况的解决方法是创建一个特殊的解决方案配置,并将类似于以下内容添加到您的项目文件中
<Choose>
<When Condition="'$(Configuration)|$(Platform)'=='YourSpecialConfiguration|x64'"><!-- attention here -->
<ItemGroup>
<Reference Include="your.dllname">
<HintPath>yourSpecialPath\your.dllname.dll</HintPath><!-- attention here -->
<Private>true</Private>
</Reference>
<!-- more references here -->
</When>
<Otherwise>
<ItemGroup>
<Reference Include="your.dllname">
<HintPath>yourRegularPath\your.dllname.dll</HintPath><!-- attention here -->
<Private>true</Private>
</Reference>
<!-- AND more references here -->
</Otherwise>
</Choose>
这将允许您在 CI/Build 中更改配置名称并完成这项工作。
【讨论】:
【参考方案2】:问题是由 Microsoft.NET.Sdk.props 引起的:AssemblySearchPaths 没有 ReferencePath。 通过添加到 csproj 修复:
<PropertyGroup>
<AssemblySearchPaths>
$(AssemblySearchPaths);
$(ReferencePath);
</AssemblySearchPaths>
</PropertyGroup>
【讨论】:
您还有其他选择吗?我试过这个,但它没有帮助。【参考方案3】:但是“dotnet build”没有类似的说法。
你为什么这么说?
dotnet cli
仍然支持使用-p
而不是/p
的“属性注入”。 Link (Search for "-p")
对于您的问题,build
命令将如下所示:
dotnet build -p:ReferencePath=xxx
【讨论】:
以上是关于.NET Core - 构建项目指定 ReferencePath的主要内容,如果未能解决你的问题,请参考以下文章
.Net Core Visual Studio 项目命令行构建与右键构建相同