2017-09-06 42 views
0

发布的.Net核心Web API项目,(Framework Depended DeploymentVS2017发布核心网络API指定目标的完整框架

  1. 如果我的目标Full Framework即net456,这将发布所有框架中的DLL文件夹net462bin\Release

    WebApp.csproj

    <PropertyGroup> 
        <TargetFramework>net462</TargetFramework> 
        </PropertyGroup> 
    

enter image description here

2.如果我的目标Core 1.1即netcoreapp1.1,这将只发布应用程序的DLL在netcoreapp1.1文件夹下bin\Release

WebApp.csproj 
<PropertyGroup> 
    <TargetFramework>netcoreapp1.1</TargetFramework> 
    </PropertyGroup> 

enter image description here

是什么原因这种行为?

回答

1

您可能正在查看错误的文件夹,发布的输出应该在bin\Release\netcoreapp1.1\publish

正常的编译输出不包含dll,因为.NET Core可以从全局NuGet包缓存中查找引用的DLL。 .runtimeconfig.json将在您的机器上指定此缓存的位置,因此不需要为每个构建都复制这些DLL。

但是,.NET Framework没有这种逻辑,因此需要将DLL复制到构建输出。

此外,在.NET Core 2.0中,大多数用于ASP.NET Core应用程序的NuGet包都是.NET Core 2.0中包含的运行时包存储的一部分,因此您只会发布不是这家商店的一部分。 由于此存储不适用于.NET Framework,因此该机制不能用于.NET Framework应用程序,并且所有程序集都是已发布输出的一部分。

+0

你知道为什么它是这样设计的吗?因为在FDD中我希望在发布文件夹中只有项目DLL。顺便说一句VS2017不会在'Release \ [框架]下生成一个发布文件夹' –

+0

是vs 2017使用'PublishOutput'文件夹或类似'Release'下的类似文件夹。发布结果包括可以运行的项目的完全依赖项关闭。这意味着包含的所有内容不属于运行时和运行时存储的一部分。 –

相关问题