2014-05-02 53 views
6

我有一臺家用機器和辦公機器,我使用Visual Studio 2013發佈網站。如果我從同一臺機器進行更改並重新發布,只是發佈更改,而不是所有文件。爲什麼VS2013在使用其他機器時發佈所有網站文件?

但是,在辦公室使用我的克隆機器時,即使我做了最新的修改,重新發布,所有文件都會發布,不僅僅是那些發生變化的文件,已被重新編譯。所有的dll文件,甚至是沒有改變或者已經重新編譯過新日期的第三方dll都會被重新發布。如果我的團隊在完成最後一次發佈後在他的機器上發佈了一個小改動,則會發生同樣的情況。如果從同一臺機器發佈兩次,然後只發布已更改的文件,則不是問題。

有沒有辦法阻止完全重新發布,因爲使用不同的機器進行發佈,而不是用於上次發佈的發佈?謝謝。

+0

有沒有人見過或處理呢? – Dave

+0

這有什麼好運?我遇到同樣的問題 –

+0

不,我已經知道了。我的同事通常會發佈網站,當我發佈他的網站時,所有內容都會更新,反之亦然,但當我們發佈自己的網站時並非如此。 – Dave

回答

3

這似乎讓 「確定更改」 慢了很多,但對於.NET 4.5 [和 了(?),可以從該信息: https://msdn.microsoft.com/en-us/library/ee942158

配置Web部署使用校驗代替日期確定 哪些文件需要拷貝到服務器上,下面的元素 添加到.pubxml文件(發佈設置):

<MSDeployUseChecksum>true</MSDeployUseChecksum> 

像這樣:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <MSDeployUseChecksum>true</MSDeployUseChecksum> 
    <!— other settings omitted to keep the example short --> 
    <PublishDatabaseSettings> 
     <!— this section omitted to keep the example short --> 
    </PublishDatabaseSettings> 
    </PropertyGroup> 
</Project> 
+1

THX。可能是因爲它具有讀取文件,或者至少是頭,如果它有它很可能不會。太糟糕了OS不提供的校驗屬性的校驗一個有助於達到這個目的的文件。似乎他們必須在發佈期間使用錯誤的日期(最後修改,最後訪問,創建),而不是希望在文件本身沒有被修改的情況下保持不變的日期(不確定這是否是創建或最後修改副本)。 – Dave

2

首先,我完全不理解MSBuild + VS2013的行爲和發佈功能,因爲我剛開始自己​​使用發佈功能。我正在尋找一種方法來加速通過VS2013中的FTP web部署進行發佈。 (我沒有使用TFS獲取最新版本,儘管如此。)

我會說這是在this SO question的不同背景下部分解釋的。 MSBuild進程。某些文件的時間戳正在進行比較,然後可能指示MSBuild/VS2013目標(構建輸出)是否最新。然後重新編譯不是最新的文件。 由於你們都在不同的機器上工作,時間戳很可能很快就會有所不同。

要了解構建/發佈過程中實際發生了什麼,請將構建輸出詳細程度設置爲詳細或診斷,片刻: VS2013菜單 - 工具 - 選項... - 項目和解決方案 - 構建和運行 - 輸出詳細 - 設置爲 - >詳細診斷。運行構建,並查看VS2013中的「輸出」面板/選項卡。如果不可見,請選擇「顯示來自:Build的輸出」以查看結果。 檢查構建細節後,不要忘記將其設置爲原始設置,因爲它可能會減慢構建的速度。

但爲什麼即使不變的第三方DLL正在重新發布?可能是因爲這些DLL在構建期間實際上被覆蓋。您可以將程序集引用屬性「Copy local」設置爲true,以使您的網站無需手動上載即可運行。或者你正在使用命令行復制命令,並在項目的後期構建事件期間將overwrite參數顯式設置爲true(如'copy/y ...'或'xcopy/y ...')。然後,待發布文件的時間戳肯定會被覆蓋,請參閱 「obj \ Release \ Package \ PackageTmp」文件夾(或者如果設置了調試版本,則例如:「\ Debug」而不是「\ Release」 )

此外,如果您使用FTP發佈,VS2013作爲默認設置不會檢查目標web服務器上的時間戳差異,至少這是我的經驗。至於像web部署等其他發佈選項,我還不知道。但是,您遇到的差異對我來說似乎是正常的行爲,因爲您在不同的機器上運行構建,並從不同的機器發佈文件。所以時間戳可能會有所不同......這又一次表明「更改」了要發佈的文件。

由於我很好奇這個問題應該如何解決,所以我一直在尋找這個問題: 也許TFS構建服務器是一個選項,配置了滾動構建。但是我閱讀了一個具體的SO(對不起,現在不能添加更多的鏈接,因爲我剛剛註冊了),這是建議做乾淨的構建,以防止出現新問題。這將迫使完全發佈,因爲文件全部被幹淨的版本改變...所以這不會工作,我認爲。

作爲一個答案,你可能想使用these FAQ answers on MSDN的網絡部署。查看問題:

  1. 「我可以從部署中排除特定文件或文件夾嗎?」 .NET 4.0/4.5和/或
  2. 「如何使Web部署使用文件校驗和,而不是日期的,以 確定哪些文件被改變了嗎?」只有.NET 4.5!

第一個選項是要排除的文件。 第二種選擇是使用校驗和來比較文件而不是時間戳,但這可能會使構建(?)過程有所放慢,正如FAQ所述。請注意該FAQ頁面的前幾行,以及如何編輯發佈配置文件以應用這些元素中的一個或兩個!

此外,它是一個選項,把第三方dll的一個不同的項目,然後你可以只包括部署該項目的某些解決方案配置(VS2013菜單 - 構建 - 配置管理器,請參閱'部署中的複選框'雖然我不確定這是否是作爲Web部署的VS2013「發佈」功能的一部分,但由於某些原因,此部署列複選框對我的解決方案項目呈灰色,我不明白...所以雖然這聽起來邏輯,我不能測試,以驗證該選項。)

,不要忘記先創建備份/複製/截圖您更改任何設置或發佈配置文件之前,然後更改您和您之間的其他機器上的相同設置/可配置文件r同事在工作。

相關問題