PackageReference到同一解决方案/git存储库中的项目

问题描述 投票:0回答:1

目前我正在尝试设置一个带有实现类库和抽象项目的解决方案。我想在 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>

随机

<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
,这就是为什么他们能够:

  1. 在本地构建并测试解决方案(因此他们将充当
    ProjectReferences
  2. 将代码推送到 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,但里面没有什么特别的。

如何在基于 dotnet 的项目中使用

Reference
标签,以便在本地构建/测试时引用代码,并在 CI 管道中构建/推送时引用新包?

参考Microsoft.NET.Sdk文档

更新:

@pinkfloydx33,你是对的。我只能在 nupkg 中看到一个程序集/dll:

更新2:

我将

Microsoft.SourceLink.GitHub
包添加到我的项目中,下载/解压新版本的包后,我可以看到以下内容
nuspec
:

其中

77b181a24a83e46b4c80376f65bb305bedba1a64
是提交 ID。

谢谢你的提示。

c# .net nuget-package project-reference github-ci
1个回答
0
投票

使用以下内容:

Condition="'$(Configuration)'=='DEBUG'"ProjectReferenceCondition="'$(Configuration)'!='DEBUG'"PackageReference

这对我来说效果很好,并且取决于配置风格。

示例:

 <ProjectReference Include="..\Company.Project1\Company.Project1.csproj" Condition="'$(Configuration)'=='DEBUG'" />
 <PackageReference Include="Company.Project1" Version="1.*"  Condition="'$(Configuration)'!='DEBUG'"/>

 <ProjectReference Include="..\Company.Project2\Company.Project2.csproj" Condition="'$(Configuration)'=='DEBUG'" />
 <PackageReference Include="Company.Project2" Version="1.*"  Condition="'$(Configuration)'!='DEBUG'"/>
© www.soinside.com 2019 - 2024. All rights reserved.