在开发中轻松覆盖NuGet DLL(VS 2015)
在VS 2015中,我们有3个包含C#项目的解决方案。其中一个创建一个NuGet包,另两个引用该NuGet包中的DLL。(DLL包含应用程序两部分之间的接口。)TeamCity build server构建DLL和NuGet包,并自动设置其版本 在开发中,我希望能够轻松地测试对DLL的更改,而无需提交更改并等待生成包。最好的方法是什么?理想情况下,我想说:如果在开发中轻松覆盖NuGet DLL(VS 2015),dll,msbuild,nuget,visual-studio-2015,nuget-package,Dll,Msbuild,Nuget,Visual Studio 2015,Nuget Package,在VS 2015中,我们有3个包含C#项目的解决方案。其中一个创建一个NuGet包,另两个引用该NuGet包中的DLL。(DLL包含应用程序两部分之间的接口。)TeamCity build server构建DLL和NuGet包,并自动设置其版本 在开发中,我希望能够轻松地测试对DLL的更改,而无需提交更改并等待生成包。最好的方法是什么?理想情况下,我想说:如果C:\Build\My.dll存在,那么不管其版本如何,都使用它,否则使用MyDLL numget包的version 1.2.3.4。有没
C:\Build\My.dll
存在,那么不管其版本如何,都使用它,否则使用MyDLL numget包的version 1.2.3.4
。有没有办法指定它并让它在NuGet升级中“生存”下来
我尝试暂时删除对该DLL的引用,并直接添加对所需版本的引用,但问题是,许多项目中都引用了该DLL,对所有项目执行此操作相当麻烦。您可以在csproj文件中使用条件引用来实现此目的。查看此MSDN链接了解更多信息:看起来可以通过删除现有的NuGet引用在BeforeBuild步骤中完成。这样,NuGet引用项本身是不变的,可以在升级期间由NuGet自由替换,但在构建我的DLL版本时(如果存在的话)会被使用
无论版本如何,删除引用也需要稍加修改
<Target Name="BeforeBuild">
<!-- Override NuGet package with a local copy in dev, if available -->
<PropertyGroup>
<ReplacementLocalDllPath>Some\Path\My.dll</ReplacementLocalDllPath>
</PropertyGroup>
<ItemGroup Condition="Exists($(ReplacementLocalDllPath))">
<!-- Remove any version of the DLL to be replaced -->
<ReferenceToBeRemoved Include="@(Reference)" Condition="$([System.String]::Copy("%(Reference.Filename)").StartsWith('My'))" />
<Reference Remove="@(ReferenceToBeRemoved)" />
<!-- Add the local DLL, ignoring its version -->
<Reference Include="My, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(ReplacementLocalDllPath)</HintPath>
</Reference>
</ItemGroup>
</Target>
Some\Path\My.dll
假的
$(ReplacementLocalDllPath)
我试过了,只要不升级NuGet软件包,效果就很好。但是,当您升级它时,它会删除条件引用并添加一个无条件引用。它在NuGet软件包更新中幸存了下来。在初始dll引用之后,我有了这个项目组<代码>C:\Temp\ConditionalProjRefTest\log4net.dll
是的,但是您是否也有NuGet参考?这也需要是有条件的(Condition=“!Exists(…)”),否则会有重复项。是。我也有NuGet参考资料。下面是相关部分:。\packages\log4net.2.0.3\lib\net40 full\log4net.dll True C:\Temp\ConditionalProjRefTest\log4net.dll
为了添加到前面的注释中,我最初参考了log4net包2.0.0,并将其更新为log4net 2.0.3