【问题标题】:Creating a custom Sdk in .Net Core在 .Net Core 中创建自定义 SDK
【发布时间】:2019-05-16 20:58:38
【问题描述】:

在 .Net 核心项目中,有一个 .csproj 文件,其中第一行指定了您在该项目中定位的 SDK,类似于:

<Project Sdk="Microsoft.NET.Sdk.Web">

我的问题是是否有可能创建一个全新的 SDK(可能通过扩展 Microsoft.NET.Sdk.Web)然后在其他一些项目中使用这个新的自定义 SDK,以使新项目中包含这样的东西它的.csproj 文件:

<Project Sdk="My.Own.Sdk">

这样的事情怎么可能做到?

【问题讨论】:

标签: visual-studio .net-core sdk


【解决方案1】:

是的,您可以这样做是为了好玩,但不太可能有官方支持发布。

How to: Use MSBuild project SDKs

它展示了msbuild如何加载props和targets,您可以在.NET SDK安装文件夹中找到SDK.propsSDK.targets文件(在Windows上表示为dotnet,例如C:\Program Files\dotnet

要创建自己的 sdk,您需要做的是在 dotnet/sdk 内创建一个文件夹,类似于任何其他 SDK 的外观。

并制作路径为dotnet/sdk/&lt;SDK_VERSION&gt;/Sdks/&lt;YOUR_SDK_NAME&gt;/SdkSDK.propsSDK.targets 文件,作为引用您的道具和目标以自定义构建步骤的条目,

如果按照惯例需要任何其他文件,请创建新文件以模仿现有文件。

但是,官方支持的自定义调用者构建步骤的方法是使用约定子文件夹 buildcreate a nuget package,并且道具和目标文件将自动进入引用该包的项目中。

【讨论】:

    【解决方案2】:

    是的,这绝对是可能的,是的,它甚至可以发布。例如,您可以在 Microsoft.Build.Traversal 找到灵感。

    SDK 基本上是一个 nuget 包,它有两个文件,Sdk\Sdk.propsSdk\Sdk.targets

    如果您将带有此类文件的 NuGet 包发布到 NuGet.org,则可以将其引用为

    <Project Sdk="YourNugetName/1.0.0">
    </Project>
    

    1.0.0 是您的版本。

    为了测试,SDK 还可能包含(完全限定的)目录路径,该目录包含与 nuget 包相同的内容,并且仅运行 dotnet build 会消耗定义的 SDK,并在其上运行目标 Build

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2017-06-21
      • 2017-11-09
      相关资源
      最近更新 更多