Msbuild BaseMediateOutput路径的设置阻止运行Nuget的.targets

Msbuild BaseMediateOutput路径的设置阻止运行Nuget的.targets,msbuild,nuget,visual-studio-2017,Msbuild,Nuget,Visual Studio 2017,我有MSVS2017(15.3)和以下问题。我的项目引用System.Data.SQLite,该文件包含将一些本机DLL复制到输出文件夹的目标文件。在我在props文件中为BaseIntermediateOutputPath参数指定值之前,所有操作都正常(DLL显示在正确的位置)。设置参数后,生成成功,但缺少DLL 项目文件: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>

我有MSVS2017(15.3)和以下问题。我的项目引用System.Data.SQLite,该文件包含将一些本机DLL复制到输出文件夹的目标文件。在我在props文件中为BaseIntermediateOutputPath参数指定值之前,所有操作都正常(DLL显示在正确的位置)。设置参数后,生成成功,但缺少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>

Exe
net452

导入的道具具有以下内容

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

$(MSBuildThisFileDirectory)
调试
$(TargetFramework)\ u$(平台)\ u$(配置)
../bin/
../tmp/$(MSBuildProjectName)/
$(BaseOutputPath)$(SynOutDir)
$(输出路径)
7.

您在MSBuild中遇到了由导入订单引起的已知问题。在MSBuild 15中,上的“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”,它将神奇地为您导入。
请参见

您在MSBuild中遇到了由导入顺序引起的已知问题。在MSBuild 15中,上的“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”,它将神奇地为您导入。
请参见

注意,
目录.Build.props
文件将在公共props中尽早导入,以便正确设置
BaseMediateOutput路径
。这一点很好。我更新了答案以包含该提示。我们最近开始在大多数项目中使用Directory.Build.props。对于某些人来说,它可能有点太“神奇”,但它可以让您保持
注意,
目录.Build.props
文件将在公共props中尽早导入,以便正确设置
BaseMediateOutputPath
。这一点很好。我更新了答案以包含该提示。我们最近开始在大多数项目中使用Directory.Build.props。对某些人来说,这可能有点太“神奇”,但它可以让你保持