簡體   English   中英

在運行時不是特定於版本的Visual Studio項目參考

[英]Visual Studio project reference that isn't version specific at runtime

我們有一個多項目解決方案。 項目之間的引用是作為項目引用而不是程序集引用完成的(正如人們所期望的那樣)。 這對於我們的部署工作正常,但是會創建特定於版本的運行時依賴項。 問題在於我們希望開始創建僅更新已更改的特定dll的熱修復程序安裝程序。 對於我們當前的客戶情況,無法更新所有dll。

項目參考上的“特定版本”屬性已禁用,除了查找程序集參考並使用csproj中的Choose塊在基於構建配置的調試/發行版之間進行切換之外,我很難找到解決方法。

是否有另一種選擇允許運行時使用任何版本?

免維護

我們采用的方法是將Assembly版本設置為固定數量,並且僅在構建時更新File版本(我們以前使兩者保持同步)。 我們采用這種方法,因為它免維護,並且讓我們保留Project的引用。

程序集版本是.net用於查找依賴dll的特定版本的版本。 如果通過Windows資源管理器查看文件的屬性詳細信息,將顯示文件版本。

如果要修復任何dll,則需要將所有程序集引用更新為versionSpecific=false ,並將所有項目設置為具有固定程序集版本。 如果只想修復特定的項目dll,則只需修復這些項目上的程序集版本。 然后,引用項目可以保留所需的任何程序集版本方案。

程序集版本在ProjectFolder/Properties/AssemblyInfo.cs 現在,我們將其固定為1.0.0.0,並且僅在構建時增加文件版本。

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.2.3.45678")]

需要維護

如果無法設置固定的Assembly版本,則另一種方法可以是使用File引用。 這里的問題是,項目dll的路徑將根據活動的構建配置(調試與發布)而變化。 為了解決這個問題,您可以根據配置使引用成為條件引用。

主要缺點是您需要手動維護構建順序。 此外,如果添加新項目,則需要記住再次使用這些動態引用。

  <Choose>
    <When Condition="'$(Configuration)'=='Release'">
      <ItemGroup>
        <Reference Include="Your.AssemblyName">
          <HintPath>..\Your.AssemblyName\bin\x86\release\Your.AssemblyName.dll</HintPath>
        </Reference>
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <Reference Include="Your.AssemblyName">
          <HintPath>..\Your.AssemblyName\bin\x86\debug\Your.AssemblyName.dll</HintPath>
        </Reference>
      </ItemGroup>
    </Otherwise>
  </Choose>

如果需要,您還可以將Debug保留為項目參考,這將使您看到Visual Studio根據項目參考自動生成的構建順序。 然后,您將能夠為您的發布配置模擬該序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM