在多个项目中引用公共二进制文件

时间:2017-04-12 04:05:59

标签: c# .net

我有一个第三方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的版本更改?

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

3 个答案:

答案 0 :(得分:1)

Private 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"/>
    
  3. 在common.props中进行更改后,VS中可能存在构建错误,因为引用会立即更新。首先通过命令行msbuild.exe验证它。

答案 1 :(得分:0)

您的团队其他成员可以访问的

Setup a Private Nuget Repository。 请参阅Scott's回答。

<强> TL;博士

  • 打开Visual Studios
  • 创建一个新的空Web项目
  • 添加Nuget.Server包
    • 包管理器控制台:install-package nuget.server
    • 覆盖web.config:是
  • 打开Web.config
  • 设置appSettings
    • packagesPath:nuget将要放在哪里
  • 初始值:

    nuget init c:\ source c:\ localnuget

  • 推送:

    nuget push {package file} -s http://localhost:51217/nuget {apikey}

Alternate hosting

答案 2 :(得分:0)

为了增加TriV评论的灵活性,您可以定义一个环境变量(例如CONTOSO_VERSION)并在预构建事件命令中使用它将DLL复制到您的bin文件夹中(或者您可以在任何地方)。使用$ CONTOSO_VERSION重新引用。这样,您可以通过env变量来回更改引用的DLL版本。确保它为其他项目所依赖的项目预构建事件(或者根据它创建一个虚拟项目以进行解决方案范围的预构建事件)。