在 .Net Core 中创建自定义 Sdk

Beh*_*ooz 5 sdk visual-studio .net-core

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

<Project Sdk="Microsoft.NET.Sdk.Web">
Run Code Online (Sandbox Code Playgroud)

我的问题是是否有可能创建一个全新的 SDK(也许通过扩展Microsoft.NET.Sdk.Web)然后在其他一些项目中使用这个新的自定义 SDK,这样新项目的文件中就会有这样的内容.csproj

<Project Sdk="My.Own.Sdk">
Run Code Online (Sandbox Code Playgroud)

怎么可能做这样的事情?

not*_*row 5

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

SDK 基本上是 nuget 包,有两个文件,Sdk\Sdk.props以及Sdk\Sdk.targets.

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

<Project Sdk="YourNugetName/1.0.0">
</Project>
Run Code Online (Sandbox Code Playgroud)

其中 1.0.0 是您的版本。

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


Als*_*ein 4

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

如何:使用 MSBuild 项目 SDK

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

创建自己的 sdk 所需要做的就是在内部创建一个dotnet/sdk与任何其他 SDK 类似的文件夹。

并使用 path 制作SDK.propsSDK.targets文件dotnet/sdk/<SDK_VERSION>/Sdks/<YOUR_SDK_NAME>/Sdk,作为引用您的 props 和目标来自定义构建步骤的条目,

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

但是,官方支持的自定义调用者构建步骤的方法是创建一个带有约定子文件夹的nuget 包build,并且 props 和目标文件将自动添加到引用该包的项目中。