it编程 > 编程语言 > C#

C# 多项目打包时如何将项目引用转为包依赖(最新推荐)

9人参与 2025-04-24 C#

项目背景

最近开发一组类库,大约会有五六个项目。一个core,加上若干面向不同产品的实现库,a/b/c/d...它们都依赖core.

首先,我想统一版本号,这个容易,通过directory.build.props设置。

其次,每个库要单独发包。

问题是在开发阶段,子项目都是通过项目引用core的,便于调试,怎么实现在打包时自动加上对core包的依赖?

经过试验,可以总结三种方法:

一、生成时将 projectreference 转为 nuget 依赖项 (not work)

这个deepseek推荐的方案,但很遗憾,我没试验成功。

它的项目结构是这样的:

<itemgroup>
  <projectreference include="..\core\myproject.core.csproj" >
    <privateassets>all</privateassets>
    <publish>true</publish>
    <version>$(packageversion)</version>
    <packageid>myproject.core</packageid>
  </projectreference>
</itemgroup>
<target name="forcepackagereferenceconversion" beforetargets="generatenuspec">
  <itemgroup>
    <_packagereferencestoadd include="@(projectreference->withmetadatavalue('publish', 'true'))">
      <packageid>%(packageid)</packageid>
      <version>%(version)</version>
    </_packagereferencestoadd>
    <packagereference include="@(_packagereferencestoadd->'%(packageid)')" version="%(version)" />
  </itemgroup>
</target>

它的核心思路是生成.nuspec前将项目引用强制转换在包引用。

我也问了github copilot,它也说行,but...请有经验的园友不吝赐教。

二、按条件引用

项目结构:

<itemgroup>
  <!-- 开发时使用 projectreference -->
  <projectreference include="..\core\myproject.core.csproj"
                    condition="'$(ispackaging)' != 'true'" />
  <!-- 打包时使用 packagereference -->
  <packagereference include="myproject.core"
                    version="$(packageversion)"
                    condition="'$(ispackaging)' == 'true'" />
</itemgroup>

然后使用命令生成:

dotnet pack -p:ispackaging=true

此法可行。

三、指定.nuspec文件

最后,我又想到了用传统的.nuspec文件。(我很喜欢以前的包管理方式,packages.config/nuspec,不理解为什么ms非要把所有的东西都往project文件里塞。)

项目结构:

  <!-- 指定自定义 nuspec 文件路径 -->
    <nuspecfile>my.nuspec</nuspecfile>
    <!-- 传递 msbuild 属性到 nuspec 中的变量 -->
    <nuspecproperties>$(nuspecproperties);
      id=$(packageid);
      version=$(version);
      company=$(company);
      authors=$(authors);
      product=$(product);
      copyright=$(copyright);
      license=$(packagelicenseexpression);
      projecturl=$(packageprojecturl);
      repositoryurl=$(repositoryurl);
      repositorytype=$(repositorytype);
      icon=$(packageicon);
      config=$(configuration)
    </nuspecproperties>

它将directory.build.props中定义的属性一一赋给nuspec.

验证可行。

到此这篇关于c# 多项目打包时如何将项目引用转为包依赖的文章就介绍到这了,更多相关c# 多项目打包内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

C#之线程同步Mutex类方式

04-24

C#实现设置Excel表格中文本对齐方式和格式

04-24

C#中实现CAN通信的使用

04-24

C# 串口扫描枪读取数据的实现

04-24

C#中同步和异步回调的实现

04-24

C# 多线程并发编程基础小结

04-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论