我有一个带有经典引用的 .NetCore 平台的 .csproj 。我在开发环境中使用hintpath
属性。但是我应该在CI环境中构建 csproj ,其中引用的程序集放在不同的目录中。
在经典的 net4 上,我使用了{em> MSBuild 工具的/p:ReferencePath
参数。
但“dotnet构建”没有类似的论点。
作为后备,我找到了“dotnet msbuild”命令,但是这个工具忽略了/p:ReferencePath=xxx
参数并向我显示
警告MSB3245:无法解析此引用。无法找到程序集“AssemblyName”。检查以确保磁盘上存在程序集。如果您的代码需要此引用,则可能会出现编译错误。
请指导我,我可以查看哪些 dotnet-build / dotnet-msbuild 工具正在搜索引用的程序集以及如何指定该目录?
答案 0 :(得分:2)
referencePath
被新的项目文件格式忽略。 /t:restore
和构建目标一起添加到msbuild命令中,以便它同时还原和构建。 <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中的配置名称即可完成工作。
答案 1 :(得分:2)
Microsoft.NET.Sdk.props解决了问题:AssemblySearchPaths没有ReferencePath。 通过添加到csproj进行修复:
<PropertyGroup>
<AssemblySearchPaths>
$(AssemblySearchPaths);
$(ReferencePath);
</AssemblySearchPaths>
</PropertyGroup>
答案 2 :(得分:1)
但是“ dotnet构建”没有类似的论点。
你为什么这么说?
dotnet cli
仍然支持使用-p
而不是/p
进行“属性注入”。 Link (Search for "-p")
对于您的问题,build
命令将类似于以下命令:
dotnet build -p:ReferencePath=xxx