设置BaseIntermediateOutputPath可防止从Nuget运行.targets

时间:2017-08-18 06:39:30

标签: msbuild nuget visual-studio-2017

我有MSVS 2017(15.3)和以下问题。我的项目引用 System.Data.SQLite ,其中包含 targets 文件,该文件将一些本机dll复制到输出文件夹。一切正常(dll出现在正确的位置),直到我在props文件中指定 BaseIntermediateOutputPath 参数的值。设置参数后,构建成功但缺少dll。

项目文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net452</TargetFramework>
  </PropertyGroup>
  <Import Project="common.net.props" />
  <ItemGroup>
    <PackageReference Include="System.Data.SQLite" Version="1.0.105.2" />
 </ItemGroup>

导入道具具有以下内容

<Project>
  <PropertyGroup>
    <SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
    <Configuration Condition="$(Configuration) == ''">Debug</Configuration>
  </PropertyGroup>
  <PropertyGroup>
    <SynOutDir>$(TargetFramework)_$(Platform)_$(Configuration)</SynOutDir>
  </PropertyGroup>
  <PropertyGroup>
    <BaseOutputPath>../bin/</BaseOutputPath>
    <BaseIntermediateOutputPath>../tmp/$(MSBuildProjectName)/</BaseIntermediateOutputPath>
    <OutputPath>$(BaseOutputPath)$(SynOutDir)</OutputPath>
    <OutDir>$(OutputPath)</OutDir>
    <LangVersion>7</LangVersion>
  </PropertyGroup>
</Project>

1 个答案:

答案 0 :(得分:1)

您在导入订单导致的MSBuild中遇到了已知问题。在MSBuild 15中,&lt; Project&gt;上的“SDK”属性。是一个隐含的顶部/底部导入。你的导入发生得太晚了。

更改订单应解决问题。你可以这样做:

<Project>
   <Import Project="common.net.props" />
   <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

   <!-- the rest of your project -->
   <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

您也可以将文件命名为“Directory.Build.props”,它会神奇地为您导入。 见https://github.com/Microsoft/msbuild/issues/1603