问题描述
目前我正在尝试使用实现类库和抽象项目来设置解决方案。我想在 nuget.org 上同时拥有这两个软件包。
通常,当您只使用 ProjectReferences 时,您只需指向 csproj:
Random.Abstractions:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Description>Abstractions for the Randomizer</Description>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<Company>MyCompany</Company>
<Authors>Pieterjan De Clippel</Authors>
</PropertyGroup>
<ItemGroup>
<packagereference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Random.Abstractions\Random.Abstractions.csproj" />
</ItemGroup>
</Project>
但是当然,当您构建 nuget 包时,您不希望 Random.Abstractions.dll 位于 Random nuget 包内,但是 >Random 包依赖于 Random.Abstractions 包。但是由于这个包还不存在,你还不能构建它。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
</PropertyGroup>
<ItemGroup>
...
</ItemGroup>
<ItemGroup>
...
<Reference Include="Microsoft.AspNetCore.DataProtection.Abstractions" />
</ItemGroup>
</Project>
所以这既不是 ProjectReference
也不是 packagereference
,这就是为什么他们能够:
- 在本地构建和测试解决方案(因此它们将充当
ProjectReferences
) - 将代码推送到 GitHub,让 GitHub 操作创建并发布包的新版本,同时它们相互依赖(因此它们将充当
packagereferences
)
我已经尝试在我的解决方案中做同样的事情,但是包含具体实现的项目无法找到抽象项目:
MyCompany.Random.Abstractions.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Description>Abstractions for the Randomizer</Description>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<Company>MyCompany</Company>
<Authors>John Wick</Authors>
</PropertyGroup>
<ItemGroup>
<packagereference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
</ItemGroup>
</Project>
MyCompany.Random.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Reference Include="MyCompany.Random.Abstractions" />
</ItemGroup>
</Project>
所以没有 ProjectReference(我们不希望 dll 在这个 nuget 包中),没有 packagereference(包尚未发布),而只是 Reference。 但不知何故,我仍然收到无法找到抽象程序集的错误:
我已经检查了 NuGet.config,但里面没有什么特别的。
如何在基于 dotnet 的项目中使用 Reference
标记,以便在本地构建/测试时引用代码并在 CI 管道中构建/推送时引用新包?
Reference to Microsoft.NET.Sdk documentation
更新:
@pinkfloydx33,你说得对。我只能在 nupkg 中看到一个程序集/dll:
更新 2:
我将 Microsoft.sourceLink.GitHub
包添加到我的项目中,在下载/解压缩我的包的新版本后,我可以看到以下 nuspec
:
其中 77b181a24a83e46b4c80376f65bb305bedba1a64
是提交 ID。
谢谢你的提示。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)