【问题标题】:Referencing common binary in multiple projects在多个项目中引用通用二进制文件
【发布时间】:2017-04-12 04:05:58
【问题描述】:

我有一个第三方 DLL,我需要在一个解决方案的多个 c# 项目中引用它。

现引用如下。

 <Reference Include="Contoso.App, Version=4.0.5.0, Culture=neutral, PublicKeyToken=xxxxxxxx, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
   <HintPath>..\ThirdParty\Contoso\4.0.5.0\Contoso.App.dll</HintPath>
  </Reference>

我的解决方案中有大约 40 个引用 Contoso.App.Dll 的项目

每当 DLL 版本更改时,都会按如下方式创建一个新文件夹

..\ThirdParty\Contoso\5.0\

我必须去更新我所有的 40 个项目,如下所示。

 <Reference Include="Contoso.App, Culture=neutral, PublicKeyToken=xxxxxxxx, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
   <HintPath>..\ThirdParty\Contoso\5.0\Contoso.App.dll</HintPath>
  </Reference>

有没有更好的方法来管理 DLL 的版本变化?

我可以在解决方案中创建单个变量并在所有项目中重复使用它吗?

【问题讨论】:

  • 您是在解决方案中的所有项目中都使用它还是只是其中的一个子集?
  • 其实并不是所有的项目。我在解决方案中有大约 70 个项目。其中 40 个引用了 DLL。
  • 你为什么不使用\ThirdParty\Contoso\CurrentVersion\Contoso.App.dll作为路径并将dll版本5.0复制到它。
  • 你不能使用 nuget 包吗?
  • @TriV 您的解决方案将不起作用,因为我还必须在参考节点中更新版本。查看我的最新编辑。

标签: c# .net


【解决方案1】:

私有 NuGet 存储库是完美的,但需要进行太多更改。更简单的方法是创建一个公共项目,让其他项目引用这个公共项目。

  1. common.props。最好使用解决方案相对路径而不是..。

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>
        <Reference Include="Contoso.App, Culture=neutral, PublicKeyToken=xxxxxxxx, processorArchitecture=MSIL">
          <HintPath>..\ThirdParty\Contoso\5.0\Contoso.App.dll</HintPath>
        </Reference>
      </ItemGroup>
    </Project>
    
  2. 在其他项目中导入。

    <Import Project="<MySolutionPath>\common.props"/>
    

common.props 更改后,VS 中可能会出现构建错误,因为引用会立即更新。首先通过命令行 msbuild.exe 进行验证。

【讨论】:

    【解决方案2】:

    Setup a Private Nuget Repository,您团队的其他成员可以访问。 见Scott's答案。

    tl;dr

    • 打开 Visual Studio
    • 创建一个新的空 Web 项目
    • 添加 Nuget.Server 包
      • 包管理器控制台:install-package nuget.server
      • 覆盖 web.config:是
    • 打开 Web.config
    • 设置应用设置
      • packagesPath:nuget 所在的位置
    • 初始化:

      nuget 初始化 c:\source c:\localnuget

    • 推:

      nuget push {包文件} -s http://localhost:51217/nuget {apikey}

    Alternate hosting

    【讨论】:

      【解决方案3】:

      只是为了增加 TriV 注释的灵活性,您可以定义一个环境变量(例如 CONTOSO_VERSION)并在预构建事件命令中使用它来使用 $ 将 DLL 复制到您的 bin 文件夹(或您引用的任何位置) CONTOSO_VERSION。这样,您可以通过 env 变量来回更改引用的 DLL 版本。确保它是其他人依赖的项目的预构建事件(或与其他依赖它的人一起创建一个虚拟项目,以实现解决方案范围的预构建事件)。

      【讨论】:

        猜你喜欢
        • 2017-07-25
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 2017-12-10
        • 2021-04-10
        • 1970-01-01
        相关资源
        最近更新 更多