我有一个第三方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的版本更改?
我可以在解决方案中创建单个变量并在所有项目中重复使用吗?
答案 0 :(得分:1)
Private NuGet存储库是完美的,但需要进行太多更改。一种更简单的方法是创建一个公共项目,让其他项目引用这个公共项目。
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>
将其导入其他项目。
<Import Project="<MySolutionPath>\common.props"/>
在common.props中进行更改后,VS中可能存在构建错误,因为引用会立即更新。首先通过命令行msbuild.exe验证它。
答案 1 :(得分:0)
Setup a Private Nuget Repository。 请参阅Scott's回答。
<强> TL;博士强>
初始值:
nuget init c:\ source c:\ localnuget
推送:
nuget push {package file} -s http://localhost:51217/nuget {apikey}
答案 2 :(得分:0)
为了增加TriV评论的灵活性,您可以定义一个环境变量(例如CONTOSO_VERSION)并在预构建事件命令中使用它将DLL复制到您的bin文件夹中(或者您可以在任何地方)。使用$ CONTOSO_VERSION重新引用。这样,您可以通过env变量来回更改引用的DLL版本。确保它为其他项目所依赖的项目预构建事件(或者根据它创建一个虚拟项目以进行解决方案范围的预构建事件)。