Msbuild BaseMediateOutput路径的设置阻止运行Nuget的.targets
我有MSVS2017(15.3)和以下问题。我的项目引用System.Data.SQLite,该文件包含将一些本机DLL复制到输出文件夹的目标文件。在我在props文件中为BaseIntermediateOutputPath参数指定值之前,所有操作都正常(DLL显示在正确的位置)。设置参数后,生成成功,但缺少DLL 项目文件: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>
<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。对某些人来说,这可能有点太“神奇”,但它可以让你保持