方案如下:
我们有一组常见的.net库:
CommonLib.Main
CommonLib.Specialized
我们有一个构建这两个库的CI构建,并将它们放入我们的NuGet仓库中。两者都可以作为单独的NuGet包使用 - 用户可能只想加载Main,或者他们可以拉出Specialized包,其中包括Main。
专业参考主要作为Nuget包。
我正在对这些软件包进行一些升级。
首先,我升级了Main。我将Main
中的AssemblyInfo
版本从 1.1.0。 更新为 2.0.0。
MsBuild将在“*”位置包含内部版本号。
CI Build运行,并且我们的NuGet仓库发布了一个名为“CommonLib.Main, version=2.0.0.345
”的Main版本。在Nuget repo上,正如我所料,该版本被列为“2.0.0”。
接下来,我升级了CommonLib.Specialized
,并将NuGet引用更新为CommonLib.Main, version=2.0.0.
我检查了这些更改,然后再次运行CI构建。
现在,CI版本已经创建了一个新版本的Main,其版本为 2.0.0.346 ,并将其放置在NuGet仓库中。
问题在于:
现在,当我们再次运行CI构建时,CommonLib.Specialized
的构建失败,因为在.csproj中,它看起来像这样:
<Reference Include="CommonLib.Main, Version=2.0.0.345, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\CommonLiib.Main-2.0.0\lib\net461\CommonLib.Main</HintPath>
</Reference>
但是,在packages.config中,它有
<package id="CommonLib.Main" version="2.0.0" targetFramework="net461" />
下拉CommonLib.Main
,版本= 2.0.0。 346 。
我们的构建在这里失败了:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64\Microsoft.Common.CurrentVersion.targets(1964,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "CommonLib.Main, Version=2.0.0.345, Culture=neutral, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
For SearchPath "{HintPathFromItem}".
Considered "..\packages\CommonLib.Main-2.0.0\lib\net461\CommonLib.Main.dll",
but its name "CommonLib.Main, Version=2.0.0.**346**, Culture=neutral, PublicKeyToken=null"
didn't match the expected name "CommonLib.Main, Version=2.0.0.**345**, Culture=neutral, processorArchitecture=MSIL".
我想我可以通过在项目中将SpecificVersion
设置为false
来解决这个问题,但这似乎相当粗糙。有没有更好的方法来解决这个问题?我觉得我不应该在每次构建后刷新NuGet引用。