我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输出文件所在的位置。对于 .NET Core 所使用的新 csproj 格式来说,你可能会发现实际生成路径中带了 netcoreapp3.0
或者 net472
这样的子文件夹。
然而有时我们并不允许生成这样的子文件夹。本文将介绍可能影响实际输出路径的各种设置。
项目和输出路径
对于这样的一个简单的项目文件,这个项目的实际输出路径可能是像下图那样的。
<Project>
<ItemGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<OutputPath>bin\$(Configuration)</OutputPath>
</ItemGroup>
</Project>
- 1
- 2
- 3
- 4
- 5
- 6
有没有办法可以不要生成这样的子文件夹呢?答案是可以的。
我在 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 一文中有说到如何解读 Microsoft.NET.Sdk,而我们的答案就是从解读这个 Sdk 而来。
影响输出路径的属性
OutputPath 属性由这些部分组成:
$(BaseOutputPath)\$(PlatformName)\$(Configuration)\$(RuntimeIdentifier)\$(TargetFramework.ToLowerInvariant())\
- 1
如果以上所有属性都有值,那么生成的路径可能就像下面这样:
bin\x64\Debug\win7-x64\netcoreapp3.0
- 1
具体的,这些属性以及其相关的设置有:
$(BaseOutputPath)
默认值bin\
,你也可以修改。$(PlatformName)
默认值是$(Platform)
,而$(Platform)
的默认值是AnyCPU
;当这个值等于AnyCPU
的时候,这个值就不会出现在路径中。$(Configuration)
默认值是Debug
。$(RuntimeIdentifier)
这个值和$(PlatformTarget)
互为默认值,任何一个先设置都会影响另一个;此值即x86
、x64
等标识符。可以通过$(AppendRuntimeIdentifierToOutputPath)
属性指定是否将此加入到输出路径中。$(TargetFramework)
这是在 csproj 文件中强制要求指定的,如果不设置的话项目是无法编译的;可以通过$(AppendTargetFrameworkToOutputPath)
属性指定是否将此加入到输出路径中。
现在,你应该可以更轻松地设置你的输出路径,而不用担心总会出现各种意料之外的子文件夹了吧!
我的博客会首发于 https://blog.walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。
如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。