目前我正在尝试设置一个带有实现类库和抽象项目的解决方案。我想在 nuget.org 上找到这两个包。
通常,当您只使用 ProjectReferences 时,您只需指向 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>Pieterjan De Clippel</Authors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
</ItemGroup>
</Project>
Random
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Random.Abstractions\Random.Abstractions.csproj" />
</ItemGroup>
</Project>
但是当然,当您构建 nuget 包时,您不希望随机抽象.dll位于Randomnuget 包,但是Random包依赖于随机抽象包裹。但由于该包尚不存在,因此您还无法构建它。
微软能够解决这个问题像这样 https://github.com/dotnet/aspnetcore/blob/main/src/DataProtection/DataProtection/src/Microsoft.AspNetCore.DataProtection.csproj#L24:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
</PropertyGroup>
<ItemGroup>
...
</ItemGroup>
<ItemGroup>
...
<Reference Include="Microsoft.AspNetCore.DataProtection.Abstractions" />
</ItemGroup>
</Project>
所以这既不是ProjectReference
nor a PackageReference
,这就是为什么他们能够:
- 在本地构建并测试解决方案(因此他们将充当
ProjectReferences
)
- 将代码推送到 GitHub 并让 GitHub Actions 创建并发布包的新版本,同时它们相互依赖(因此它们将充当
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,但里面没有什么特别的。
我怎样才能使用Reference
在基于 dotnet 的项目中添加标签,以便在本地构建/测试时引用代码并在 CI 管道中构建/推送时引用新包?
参考Microsoft.NET.Sdk文档 https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview
Update:
@pinkfloydx33,你是对的。我只能在 nupkg 中看到一个程序集/dll:
更新2:
我添加了Microsoft.SourceLink.GitHub
打包到我的项目中,下载/解压我的包的新版本后,我可以看到以下内容nuspec
:
Where 77b181a24a83e46b4c80376f65bb305bedba1a64
是提交 ID。
谢谢你的提示。