現時点では、実装クラス ライブラリと抽象化プロジェクトを使用してソリューションをセットアップしようとしています。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パッケージに依存する必要があります。しかし、このパッケージはまだ存在しないため、まだビルドできません。
Microsoft はこの問題を次のように解決できます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
</PropertyGroup>
<ItemGroup>
...
</ItemGroup>
<ItemGroup>
...
<Reference Include="Microsoft.AspNetCore.DataProtection.Abstractions" />
</ItemGroup>
</Project>
したがって、これは aProjectReference
でも 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 はありません (この nuget パッケージに dll を含めたくありません)、PackageReference はありません (パッケージはまだ公開されていません)。参照だけです。しかし、どういうわけか、Abstractions アセンブリが見つからないというエラーが表示されます。
NuGet.config を確認しましたが、特別なことは何もありません。
Reference
ローカルでのビルド/テスト中にコードを参照し、CI パイプラインのビルド/プッシュ中に新しいパッケージを参照するために、dotnet ベースのプロジェクトでタグを使用するにはどうすればよいですか?
アップデート:
@pinkfloydx33、その通りです。nupkg 内にアセンブリ/dll が 1 つだけ表示されます。
更新 2:
Microsoft.SourceLink.GitHub
プロジェクトにパッケージを追加し、パッケージの新しいバージョンをダウンロード/解凍すると、次のように表示されますnuspec
。
77b181a24a83e46b4c80376f65bb305bedba1a64
コミット ID はどこにありますか。
ヒントをありがとう。