代码之家  ›  专栏  ›  技术社区  ›  TruMan1

如何轻松切换构建的引用路径?

  •  3
  • TruMan1  · 技术社区  · 14 年前

    我有一个软件项目。所以我在我的项目中引用了该软件的DLL库,这样我就可以通过它们的API为该软件编写代码并制作一些不错的插件和扩展。

    有没有一种方法可以让我拥有一个单独的项目,但在我构建之前,选择要构建的软件版本?我想我正在寻找一种简单的方法来更新我的项目中DLL引用的路径。任何想法或提示将不胜感激。

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

    5 回复  |  直到 14 年前
        1
  •  8
  •   Jeff Mercado    14 年前

    我有非常有限的经验与项目文件直接工作,但我很肯定你可以添加条件,许多不同的设置。在您的例子中,您可以向 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>
    

    语法可能有误,但思想是存在的。我相信这样做是可行的。

        2
  •  2
  •   Noffls    14 年前

    修改 HintPath 项目文件中的元素(正如在其他答案中提到的那样,这不是一个很好的主意,因为VisualStudio使用此字段来存储在所有其他“好”文件中未找到任何内容时应该查找的位置)。我们公司也有类似的情况。我们通过设置解决方案中每个项目的ReferencePath来解决这个问题。

    因此,我们为VS编写了一个AddIn,它将为我们实现这一点。设置项目的ReferencePath非常简单,所以我认为这个任务也可以通过VS宏来完成。

        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而不是设置Hint元素的另一个优点是,可以在不同的驱动器上使用绝对路径,这在Hint元素中是不可能的。

        3
  •  0
  •   Brian    14 年前

    我认为您可以创建许多配置,并向proj文件添加一些msbuild逻辑,以有条件地设置引用路径属性,并让您的引用使用该属性。如果您熟悉在项目文件中编辑XML,那么这并不困难;如果您不熟悉,那么。。。希望其他人能帮上忙。

        4
  •  0
  •   Simon Mourier    14 年前

    VisualStudio2008和2008.csproj文件是XML文件。引用路径是这些XML文件中的简单字符串,如果用文本编辑器打开.csproj,可以检查它(查找“HintPath”或 http://geekswithblogs.net/murraybgordon/archive/2005/10/25/58103.aspx

    http://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspx 更多信息。

        5
  •  0
  •   Dongdong    6 年前

    使用 $(configuration) $(ProjectVersion) 在引用路径中切换引用。

    1. $(配置) 是“调试”或“发布”或任何其他自定义配置。

    因此,您可以在一行中完成所有引用,并且在调试和发布方面更加坚定:

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

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

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