.NET Core - 构建指定ReferencePath的项目

时间:2018-04-27 07:50:45

标签: c# .net msbuild .net-core csproj

我有一个带有经典引用的 .NetCore 平台的 .csproj 。我在开发环境中使用hintpath属性。但是我应该在CI环境中构建 csproj ,其中引用的程序集放在不同的目录中。 在经典的 net4 上,我使用了{em> MSBuild 工具的/p:ReferencePath参数。 但“dotnet构建”没有类似的论点。 作为后备,我找到了“dotnet msbuild”命令,但是这个工具忽略了/p:ReferencePath=xxx参数并向我显示

  

警告MSB3245:无法解析此引用。无法找到程序集“AssemblyName”。检查以确保磁盘上存在程序集。如果您的代码需要此引用,则可能会出现编译错误。

请指导我,我可以查看哪些 dotnet-build / dotnet-msbuild 工具正在搜索引用的程序集以及如何指定该目录?

3 个答案:

答案 0 :(得分:2)

  1. 您仍然可以使用MSBUILD在解决方案中构建.net CORE / Standard项目。
  2. 我向Microsoft报告的这似乎是一个错误(与核心/标准无关,而是新的项目文件格式),referencePath被新的项目文件格式忽略。
  3. /t:restore和构建目标一起添加到msbuild命令中,以便它同时还原和构建。
  4. 针对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中的配置名称即可完成工作。

答案 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