91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 多項(xiàng)目打包時(shí)如何將項(xiàng)目引用轉(zhuǎn)為包依賴

freeflydom
2025年4月11日 8:37 本文熱度 284

項(xiàng)目背景

最近開發(fā)一組類庫,大約會(huì)有五六個(gè)項(xiàng)目。一個(gè)Core,加上若干面向不同產(chǎn)品的實(shí)現(xiàn)庫,A/B/C/D...它們都依賴Core.

首先,我想統(tǒng)一版本號(hào),這個(gè)容易,通過Directory.Build.props設(shè)置。

其次,每個(gè)庫要單獨(dú)發(fā)包。

問題是在開發(fā)階段,子項(xiàng)目都是通過項(xiàng)目引用Core的,便于調(diào)試,怎么實(shí)現(xiàn)在打包時(shí)自動(dòng)加上對(duì)Core包的依賴?

經(jīng)過試驗(yàn),可以總結(jié)三種方法:

一、生成時(shí)將 ProjectReference 轉(zhuǎn)為 NuGet 依賴項(xiàng) (Not Work)

這個(gè)DeepSeek推薦的方案,但很遺憾,我沒試驗(yàn)成功。

它的項(xiàng)目結(jié)構(gòu)是這樣的:

<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前將項(xiàng)目引用強(qiáng)制轉(zhuǎn)換在包引用。

我也問了Github Copilot,它也說行,but...請(qǐng)有經(jīng)驗(yàn)的園友不吝賜教。

二、按條件引用

項(xiàng)目結(jié)構(gòu):

<ItemGroup>
  <!-- 開發(fā)時(shí)使用 ProjectReference -->
  <ProjectReference Include="..\Core\MyProject.Core.csproj"
                    Condition="'$(IsPackaging)' != 'true'" />
  <!-- 打包時(shí)使用 PackageReference -->
  <PackageReference Include="MyProject.Core"
                    Version="$(PackageVersion)"
                    Condition="'$(IsPackaging)' == 'true'" />
</ItemGroup>

然后使用命令生成:

dotnet pack -p:IsPackaging=true

此法可行。

三、指定.nuspec文件

最后,我又想到了用傳統(tǒng)的.nuspec文件。(我很喜歡以前的包管理方式,packages.config/nuspec,不理解為什么MS非要把所有的東西都往project文件里塞。)

項(xiàng)目結(jié)構(gòu):

  <!-- 指定自定義 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.

驗(yàn)證可行。

轉(zhuǎn)自https://www.cnblogs.com/cnsharp/p/18819771?


該文章在 2025/4/11 8:37:16 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 韩日一区 | 国产夫妻性生活视频 | 欧美日韩看片 | 国产精品喷水 | www中文字幕亚洲 | 国产性爱专区在线 | 国产夜趣福利免费 | 国产在线精品 | 国产爱情片 | 成人精品网 | 日本一二三区视频 | 敌伦交换一区二区三 | 国产愉拍99线观看 | 日本国产精品二区 | 国产九九在线视频 | ww网站免| 日韩国产传媒 | 国产精品人 | 国产精品尤物在线 | 日产乱码无线码 | 91九色露脸 | 动漫精品影视一区 | 国产日韩免费视 | 国产福利91视频 | 欧美整片sss | 国产精品视频11 | 精品黑人一 | 成人午夜性影院 | 国产欧美日韩不卡 | 国产丝袜 | 日本aⅴ网站 | 日韩精品在线观看 | 日韩欧美制服另类 | 区不卡无毒影院 | 绿巨人污视频 | 无码不卡精品 | 欧美自拍无毒不卡 | 蜜臀国产在线视频 | 九一深夜免费福利 | 精品高清三级乱伦 | 国产原创精品 |