![](/img/trans.png)
[英]Reference a project in Visual Studio and build it for a specific platform
[英]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.