繁体   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