MSBuildSdkExtras

2025-12-07 0 366

msbuild.sdk.extras

概括

软件包包含一些额外的扩展,这些扩展名是Microsoft.net.sdk SDK中目前尚不可用的SDK式项目。此功能在dotnet/sdk#491中跟踪,许多方案都在.NET 6的路线图上。

该项目的主要目标启用多目标,而无需您在CSPROJ,VBPROJ,FSPROJ中输入大量属性,从而使其保持良好和清洁。

有关更多信息,请参见博客文章。

支持的.NET Core SDK版本

重要: 3.x的附加功能需要.NET 5 SDK或更高版本。 SDK可以构建以前的目标,例如NetCoreApp3.1。 Extras 2.X支持SDK 2.x和3.x。

高级方案

该软件包还可以启用高级库方案,使您可以创建参考组件和每个倒计时的Identifendifier目标。

参考组件

参考组件在几种情况下有用。请参阅我的两个博客以获取更多详细信息。

每次限时身份

在某些情况下,涉及本机Interop,可能有必要具有不同的运行时版本。如果您通过Runtimes文件夹与参考程序集使用PackageReference,则Nuget支持了一段时间。创建和包装这些是手动的。

请参阅下文,以便轻松使用附加功能创建这些。

软件包名称:msbuild.sdk.extras

稳定的:

CI feed:https://pkgs.dev.azure.com/clairernovotny/gitbuilds/_packaging/msbuildsdkextras/nuget/v3/index.json

入门(vs 15.6+)

Visual Studio 2017 Update 6(又名V15.6 )包括对SDK从Nuget解决的支持,这是工作所必需的。建议使用VS 2019。

使用SDK

  1. 创建一个新项目

    • .NET核心控制台应用程序或.NET标准类库。
    • 与您现有的SDK风格项目一起。
    • 在存储库的TestProjects文件夹中使用模板。
  2. 将Microsoft.net.sdk替换为MSBUILD.SDK.EXTRAS,将其替换为项目的顶级SDK属性。

  3. 您必须告诉MSBUILD,SDK应该通过

    • 添加包含SDK名称和版本的global.json。
    • 将版本信息附加到SDK属性值。
  4. 然后,您可以为其他TFM编辑TargetFramework,也可以将目标帧重命名为TargetFrameWorks,并使用A指定多个TFM;分离器。

最终项目应该看起来像:

< Project Sdk = \" MSBuild.Sdk.Extras \" >
  < PropertyGroup >
    < TargetFrameworks >net46;uap10.0.19041;tizen8.0</ TargetFrameworks >
  </ PropertyGroup >
</ Project >

.NET 5 SDK是最新的,并且对桌面工作负载有更多支持。强烈建议使用该SDK,甚至可以构建较旧的目标。如果您使用的是msbuild.sdk.extras版本2或更高版本,请最少使用.NET Core 3.1 SDK。您仍然可以针对.NET Core的先前版本。

{
  \"msbuild-sdks\" : {
    \"MSBuild.Sdk.Extras\" : \" 3.0.22 \"
  }
}

SDK部分上方表示使用.NET Core 3预览要构建,MSBUILD-SDK表示要包含的Nuget软件包。

然后,您从该目录转发的所有项目文件都使用Global.json文件中的版本。对于解决方案中的所有项目,这将是首选解决方案。

再说一次,您可能只想覆盖一个项目的版本,或者如果您的解决方案中只有一个项目(不添加global.json),则可以这样这样做:

< Project Sdk = \" MSBuild.Sdk.Extras/3.0.22 \" >
  < PropertyGroup >
    < TargetFrameworks >net46;uap10.0.19041;tizen8.0</ TargetFrameworks >
  </ PropertyGroup >
</ Project >

就是这样。您不需要指定UWP或Tizen Meta包装,因为它们将自动包含。之后,您可以使用还原,构建,打包目标来还原软件包,构建项目并创建Nuget软件包。例如:msbuild /t:包装…

重要的是要注意

  • 它只能与使用桌面MSBuild(IE Visual Studio)和不是跨平台的目标平台SDK一起使用。
  • 使用JetBrains Rider时,您需要在设置中指向桌面MSBuild(设置>构建,执行,部署>使用MSBUILD版本)
  • 从CLI构建时,必须使用msbuild.exe。 dotnet构建对大多数项目类型都不起作用
  • 它可能在Visual Studio代码中起作用,但是您必须在启动中配置构建任务。JSON使用桌面MSBuild进行构建。
  • 您必须安装打算构建的平台的工具。对于Xamarin,这意味着Xamarin工作量;对于UWP,也安装了这些工具。

有关如何解决SDK的更多信息,请参见此处。

创建每个倒计时的Identifentifier软件包

您需要执行几个步骤:

  1. 即使您只构建一个单一的目标框架,也要确保使用目标帧工程而不是TargetFramework。我正在摆脱其循环功能。
  2. 将Runtime Idendifiers属性设置为有效RID(完整列表),并由半彩色(<runtimeidendifiers> win; Unix </runtimeidendifiers>)隔开。
  3. 对于您想要单独构建的TFM,请将ExtrasBuildEachRuntimeIdentimendifier属性设置为true。

完成后,您应该能够运行构建/包装,并且它将产生Nuget软件包。

笔记:

  • 您必须使用SDK =“ msbuild.sdk.extras”方法。对于这种情况,不支持使用Packagerference。
  • 虽然Visual Studio上下文不会显示每个RED,但每个RED都会为每个RED构建。
  • 附加功能定义了每个RID使用的预处理器符号(Win-X86将是WIN_X86和CENTOS.7-X64将是Centos_7_x64)。点和破折号变成了内部底。
  • Nuget软件包中每台输出组件和符号的默认路径是Runtimes/<RuntimeIdentifier>/lib/<TargetFrameWork>。
  • 可以使用该属性上的条件设置Runtime Identifiers。这使您可以拥有多个TFM,但其中只有一些有RID。

参考组件

您可能需要创建参考组件,以简化具有复杂风味(TargetFramework×Runtime Indentifier)矩阵的图书馆的开发和消费。参考组件被包装到Ref/<TargetFramework>文件夹中。请参阅我的两篇博客文章以获取详细信息。

包装其他内容

如果您需要将本机资产添加到运行时,最简单的方法是使用:

< None Include = \" path/to/native.dll \" PackagePath = \" runtimes/<rid>/native \" Pack = \" true \" />

输出包中的内容路径覆盖内容路径

将输出组件和符号打包到工具(而不是运行时间)子文件夹的最小示例。

< PropertyGroup >
  < ExtrasIncludeDefaultProjectBuildOutputInPackTarget >IncludeDefaultProjectBuildOutputInPack</ ExtrasIncludeDefaultProjectBuildOutputInPackTarget >
</ PropertyGroup >

< Target Name = \" IncludeDefaultProjectBuildOutputInPack \" >
  < ItemGroup >
    < None Include = \" @(RidSpecificOutput) \" PackagePath = \" tools/%(TargetFramework)/%(Rid) \" Pack = \" true \" />
  </ ItemGroup >
</ Target >

有关高级选项,请参见ClassLibPack* SDK测试和RIDS.TARGETS文件。

从旧方式迁移(vs 15.6)

对于那些以包装方式使用的人,您无法使用此软件包的v2.0+这样做。因此,更新至15.6+,并手动升级您的项目,如下所示:

  1. 与上面相同,替换SDK属性的值。
  2. 删除用旧方法指定的实现方法。进口属性应为MSBuildSdkExtras目标。
  3. 进行试用构建,然后将您的项目与存储店TestProjects文件夹中的模板进行比较,以在遇到任何问题时对任何问题进行故障排除。
  4. 请提出问题。

您的项目差异:

<PropertyGroup>
<TargetFrameworks>net46;uap10.0.16299;tizen40</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
– <PackageReference Include="MSBuild.Sdk.Extras" Version="1.6.0" PrivateAssets="All"/>

</ItemGroup>

– <Import Project="$(MSBuildSdkExtrasTargets)" Condition="Exists(\’$( <span class=\” notranslate keguazi>MSBuildSdkExtras Targets)\’)\”/>
<!– OTHER IMPORTS –>
</Project>\”>

 - <Project Sdk=\"Microsoft.NET.Sdk\">
+ <Project Sdk=\"MSBuild.Sdk.Extras\">
  <!-- OTHER PROPERTIES -->
  <PropertyGroup>
    <TargetFrameworks>net46;uap10.0.16299;tizen40</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
-    <PackageReference Include=\"MSBuild.Sdk.Extras\" Version=\"1.6.0\" PrivateAssets=\"All\"/>
  <!-- OTHER PACKAGES/INCLUDES -->
  </ItemGroup>

-  <Import Project=\"$( MSBuildSdkExtras Targets)\" Condition=\"Exists(\'$( MSBuildSdkExtras Targets)\')\"/>
  <!-- OTHER IMPORTS -->
</Project>
 - PackageReference style
+ SDK style

注意:SDK风格的项目现在在Mac的Visual Studio上工作。

发行说明

1.6.0

  • 已经更改了一些属性,并提供了帮助使用新属性名称的警告。

    旧财产 新属性/行为
    抑制Warnifoldsdkpack Extrasignoreoldsdkwarning
    额额绘制PlatformPackagedisabled disableImplicitFrameWorkReferences + TargetFramework条件
    嵌入式RESCERCEGENERATERATOISIONISINISINISINENTER 与临时室内的codeispublic相反
  • 对WPF和Windows表单的支持需要一个选择属性才能启用:设置ExterenableWpfProjectSetup/exterenableWinformSprojectSetup to true以包含所需的参考和默认项目。注意.NET Core 3.0已被USEWPF/useWindowsForms替换。

单个或多目标

配置此软件包后,您现在可以使用目标帧或TargetFrameworks元素中的任何支持的TFM。受支持的TFM家庭是:

  • NetStandard(.NET标准)
  • NetCoreApp(.NET Core App)
  • NET(.NET 5+和.NET框架)
  • net35-client/net40-client(.NET Framework Legacy Client配置文件)
  • WPA(Windows Phone App 8.1)
  • 赢(Windows 8 / 8.1)
  • UAP(Windows 10 / UWP)
  • WP(Windows Phone Silverlight,WP7+)
  • SL(Silverlight 4+)
  • 蒂森(Tizen 3+)
  • Xamarin.android
  • Xamarin.ios
  • Xamarin.mac
  • Xamarin.Watchos
  • Xamarin.tvos
  • portablenn-/portable-(如Portable Net45+Win8+WPA81+WP8等旧版PCL配置文件)

对于Legacy PCL配置文件,列表中TFM的顺序并不重要,但是该配置文件必须与已知配置文件之一的确切匹配。如果不是这样,您会收到一个编译错误,说它未知。您可以在此处查看已知配置文件的完整列表:Stephen Cleary的便携式库配置文件。

如果您尝试使用未安装工具的框架,那么您也会遇到一个错误来检查工具。在某些情况下,这可能意味着安装旧版本的Visual Studio IDE(如2015年),以确保在计算机上安装必要的目标。

下载源码

通过命令行克隆项目:

git clone https://github.com/novotnyllc/MSBuildSdkExtras.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 MSBuildSdkExtras https://www.zuozi.net/31673.html

EcommerceDDD
上一篇: EcommerceDDD
KeraLua
下一篇: KeraLua
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务