簡體   English   中英

如何輕松切換構建的參考路徑?

[英]How to easily switch reference paths for build?

我有一個項目是一個軟件。 所以我在我的項目中引用該軟件的DLL庫,這樣我就可以通過他們的API編寫代碼並為軟件制作一些不錯的插件和擴展。

問題是該軟件有多種版本:Enterprise,Lite,1.6版,1.7版,2.0版等。如果我希望我的項目適用於所有這些不同版本,我必須復制我的項目並重新指向DLL引用相應軟件版本的DLL庫(我現在正在這樣做)。 這真的很煩人,因為我的代碼庫對於所有版本都是相同的,所以當我進行任何更新時,我必須同步所有重復的項目,所以我有每個軟件版本的構建。

有沒有辦法讓我可以擁有一個項目,但在我構建之前,選擇要構建的軟件版本? 我想我正在尋找一種簡單的方法來更新項目中DLL引用的路徑。 任何想法或提示將不勝感激。

(如果有幫助,我可以使用Visual Studio 2008或2010和.NET 3.5或4.0)

我直接使用項目文件的經驗非常有限,但我很確定你可以為許多不同的設置添加條件。 在您的情況下,您可以向Reference或關聯的ItemGroup添加條件。

然后你可以這樣做:

<ItemGroup>
  <Reference Include="System" />
  <Reference Include="System.Core" />
  <Reference Include="System.Data.Linq" />
  <Reference Include="System.Xml.Linq" />
  <Reference Include="MyLibrary" Condition=" '$(ProjectVersion)'=='4' ">
    <HintPath>..\..\..\..\..\..\..\Libv4\MyLibrary.dll</HintPath>
  </Reference>
  <Reference Include="MyLibrary" Condition=" '$(ProjectVersion)'=='5' ">
    <HintPath>..\..\..\..\..\..\..\Libv5\MyLibrary.dll</HintPath>
  </Reference>
  ...
</ItemGroup>

語法可能有誤,但想法就在那里。 我相信這樣做是可行的。

修改項目文件中的HintPath元素(正如在其他答案中提到的那樣,IMO不是一個好主意,因為如果在所有其他“好”中找不到任何內容,Visual Studio會使用此字段來存儲它應該看起來的位置)。 在我們公司,我們有類似的情況。 我們通過在解決方案中設置每個項目的ReferencePath來解決此問題。

如果你必須為大型解決方案做這件事,那么這樣做是非常煩人的。 因此我們為VS編寫了一個AddIn for VS. 設置Project的ReferencePath很容易,所以我認為這個任務也可以由VS Macro完成。

這是由Marco設置ReferencePath的代碼:

    Sub SetReferencePath()
    Dim project As Project

    For Each project In DTE.Solution.Projects

        If project.Kind = CodeModelLanguageConstants.vsCMLanguageCSharp Then
            project.Properties.Item("ReferencePath").Value = "PATH1;PATH2;..."

        End If

    Next
    End Sub

ReferencePath屬性的值是以分號分隔的路徑列表。 使用ReferencePath而不是設置提示元素的另一個優點是,您可以在不同的驅動器上使用絕對路徑,這是使用提示元素無法實現的恕我直言。

我認為您可以創建許多配置,並向proj文件添加一些msbuild邏輯,以有條件地設置引用路徑屬性並讓您的引用使用該屬性。 如果您熟悉在項目文件中編輯XML,那么這並不難; 如果你不是,那么......希望其他人能幫助解決細節問題。

Visual Studio 2008和2008 .csproj文件是XML文件。 參考路徑是這些XML文件中的簡單字符串,如果您使用文本編輯器打開.csproj,您可以檢查它(查找“HintPath”,或查看此http://geekswithblogs.net/murraybgordon/archive/2005/ 10/25 / 58103.aspx )。

你可以做的是編寫一個小程序,自動構建不同的引用路徑。 Visual Studio構建可以使用DEVENV.EXE自動完成,有關詳細信息,請參閱http://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspx

在引用路徑中使用$(configuration)$(ProjectVersion)來切換引用。

  1. $(configuration)是“Debug”或“Release”或任何其他自定義配置。
  2. $(ProjectVersion)是你的環境可行的。

所以你可以在一行中完成所有引用,並且它在調試和發布時更加堅定:

    <Reference Include="YourLibrary">
        <HintPath>..\bin\$(configuration)\$(ProjectVersion)\YourLibrary.dll</HintPath>
    </Reference>

如果您的文件夾有前綴或后綴,您可以自由地將其附加到行中,例如:

    <Reference Include="YourLibrary">
        <HintPath>..\bin\$(configuration)-test\Lib-$(ProjectVersion)\YourLibrary.dll</HintPath>
    </Reference>

暫無
暫無

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

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