2017-10-11 97 views
-1

我有一個解決方案,其中包括2個項目:.NET 4.5 +網站的常規類庫(不是Web應用程序)項目。與MsBuild和Visual Studio不同的結果

當我使用Visual Studio構建此解決方案時,Nuget包和本地引用中的所有引用程序集都將複製到網站項目的bin文件夾中。

如果我嘗試使用MsBuild構建解決方案 - 網站項目的bin文件夾未收到任何程序集。

網站項目沒有選擇要建在VS的配置(這是由消息在這兩種情況下報道)

編輯 - 這裏是額外的解釋。

當我克隆從git的一個項目 - 網站的bin文件夾中只包含4已經檢查了組件: Initial bin after clone

如果我將運行與MSBuild的命令/噸:建立或/ T:重建和/ p:配置=釋放;平臺=「任何CPU」 - 我只會收到一個在我的其他項目postbuild事件的輸出,包括在解決方案: After MsBuild

但是,如果我執行建立從VS(按Ctrl +Shift + b)在發佈/調試配置 - 斌有運行Web應用程序所需的所有程序集。 After build in VS

編輯2:鏈接到例如溶液 - https://github.com/akuryan/csharp-website-test

當一個建立其與msbuild TestApp.sln /t:Rebuild /p:Configuration=Release;Platform="Any CPU" - 這會導致僅Test.Core *和LetsEncrypt.Umbraco.dll(最初簽入)發現在。 ~\Test.Web\bin\(其中Test.Web是網站項目)。如果用VisualStudion 2015構建TestApp.sln(我想,2013和2017將是相同的) - ~\Test.Web\bin\可以獲得全部程序集。

+0

你會介意與我們分享github鏈接,以便我們能夠重現此問題嗎? –

+0

查看最新的edit2 :) –

回答

1

用的MSBuild和Visual Studio

不同的結果,這是因爲所有dll.refresh文件中旁邊的二進制文件bin文件夾被.gitignore忽略。

由於Web站點項目沒有任何項目文件(.csproj)來放置程序集引用,因此MSBuild使用*.dll.refresh文件來了解程序集引用。該文件的內容是通過解決方案的packages文件夾與.dll的相對路徑。當您忽略所有那些.dll .refresh .gitignore時,MSBuild無法理解如何處理dll文件。

爲了測試這個,我創建了一個網站項目,爲它添加一個nuget包,然後刪除dll文件,但將.dll.refresh文件保留在bin文件夾中。建立由MSBuild的命令行的網站項目:

msbuild.exe TestWebsite.sln /t:Rebuild 

此命令完成後,dll文件拷貝到bin文件夾。

因此,構建和包恢復工作,它看起來像你需要保持文件在bin文件夾。您可以從版本控制系統中刪除其他二進制文件。

注意:如果你想獲得這些.dll.refresh回來,你可以使用包管理器控制檯的命令行:

update-package -reinstall 

希望這有助於。