2013-02-28 103 views
4

我正在使用新的ASP.Net和Web工具2012.2 發佈配置文件的網站(而不是Web應用程序)。如何從Web站點項目中使用發佈配置文件(.pubxml)時設置AssemblyVersion?

我已經創建了一個發佈配置文件使用在網站的根目錄中創建文件website.publishproj的工具。

website.publishproj文件包含以下內容:

<AssemblyAttributes Include="AssemblyFileVersion"> 
    <Value>$(AssemblyFileVersion)</Value> 
</AssemblyAttributes> 
<AssemblyAttributes Include="AssemblyVersion"> 
    <Value>$(AssemblyVersion)</Value> 
</AssemblyAttributes> 

這表明,你可以在屬性的MSBuild通過設置輸出DLL的版本。

但是,網站的單個輸出程序集(它被編譯併合併到一個程序集中)的版本號始終爲1.0.0.0。我試過/p:AssemblyFileVersion=2.1.0.0;AssemblyVersion=2.1.0.0,但是這沒有效果。

我甚至試過直接編輯website.publishproj文件,但這也沒有效果。

有誰知道如何在Web上設置輸出程序集的版本號Site當你想將它合併到一個程序集中的項目?

回答

4

我已經設法解決這個問題。我認爲這是一個工具的錯誤。

如果將OutputPath屬性設置爲website.publishproj文件中的相對路徑,則不會遵守AssemblyVersionAssemblyFileVersion屬性。

這是由於在將網站裝配合併到一個裝配體中時該版本的工作方式。

會發生什麼情況是在部署過程中生成AssemblyInfo.cs文件,並輸入提供的版本號。然後,這個AssemblyInfo.cs文件編譯成AssemblyInfo.dll包含您傳入的版本號。

然後aspnet_merge.exe被稱爲與copyattrs參數指向它以前生成的AssemblyInfo.dll

如果您將OutputPath設置爲相對路徑,則此copyattrs參數指向不存在的dll。這是因爲它是從aspnet_merge.exe工具所在的路徑運行的。因此,返回到AssemblyInfo.dll程序集的相對路徑不會找到它的真實位置。

OutputPath不能相對。

要解決這個問題,我設置礦:

<PropertyGroup> 
    <OutputPath>$(MSBuildProjectDirectory)\..\..\TempPackageBuildDir\</OutputPath> 
</PropertyGroup> 

何必設置OutputPath呢?

當您未設置OutputPath時,它將在您的環境變量中使用temp目錄。在我的情況下,這會導致構建失敗,因爲某些文件的文件長度超過了260個字符的窗口限制(我有一個非常大的網站)。我完全可以建立它的唯一方法是將OutputPath設置爲更淺的路徑。

0

我得到類似的問題,但出於不同的原因。

我的項目的MSBuild Options > Output folder路徑設置爲比我Publish > Connection > Target location路徑不同的路徑,所以它不是繼承了AssemblyInfo.dll

的版本信息,希望這會幫助別人。

相關問題