Praveen Reddy
Praveen Reddy

Reputation: 7393

Referencing common binary in multiple projects

I have a third party DLL which I need to reference in multiple c# projects in a solution.

It is presently referenced as follows.

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

I have around 40 projects in my solution which reference the Contoso.App.Dll

Whenever the DLL version changes a new folder is created as follows

..\ThirdParty\Contoso\5.0\

I have to go and update all my 40 projects as follows.

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

Is there a better way to manage the version change of the DLL?

Can I create single variable in the solution and reuse it across all the projects?

Upvotes: 0

Views: 111

Answers (3)

qxg
qxg

Reputation: 7036

Private NuGet repository is prefect, but requires too many changes. A simpler way is to create a common project and let other projects reference this common project.

  1. common.props. It's better to use solution relative path instead of ...

    <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 it in other project.

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

There may be build errors in VS after changes are made in common.props because the reference is updated instantly. Verify it via command line msbuild.exe first.

Upvotes: 1

Alic W
Alic W

Reputation: 138

Just to add flexibility to TriV's comment, you can define an environment variable (e.g. CONTOSO_VERSION) and use it in the pre-build event command to copy the DLL into your bin folder (or wherever you're referencing from) using $CONTOSO_VERSION. This way you can change the referenced DLL version back and forth via env variable. Make sure it's pre-build event for a project others depend on (or create a dummy project with others depending on it for a solution-wide pre-build event).

Upvotes: 0

lloyd
lloyd

Reputation: 1811

Setup a Private Nuget Repository that the rest of your team can access. See Scott's answer.

tl;dr

  • Open Visual Studios
  • Create a new Empty Web Project
  • Add the Nuget.Server Package
    • Package manager console: install-package nuget.server
    • Overwrite web.config: Yes
  • Open Web.config
  • Set appSettings
    • packagesPath: where the nuget is going to sit
  • Init:

    nuget init c:\source c:\localnuget

  • Push:

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

Alternate hosting

Upvotes: 0

Related Questions