2017-09-06 57 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'下的類似文件夾。發佈結果包括可以運行的項目的完全依賴項關閉。這意味着包含的所有內容不屬於運行時和運行時存儲的一部分。 –

相關問題