使用 dotnet cli 编写任务

Writing tasks using dotnet cli

我的.net core应用越来越棒了,兄弟们都想用。我需要给他们一个安全的方法来获得项目 运行ning,以及一个添加发布任务的策略。

现在,感谢我在 and 中收到的帮助,我 运行 我的应用程序使用以下命令。

dotnet watch run --environment "Development"

如果我能让我的开发人员使用更直接的东西,我会很高兴,也许是 npm 脚本中的自定义任务:

dotnet run dev

我知道有基础设施可以通过 .csproj 文件中的 msbuild 来支持这种事情,但文档对我来说没有用。

Nodejs 具有惊人的 cli 和脚本功能,这就是我们在项目中用于 devops 工具的功能。

只需用脚本添加一个package.json:

{
  scripts : {
    start: "dotnet watch run --environment Development",
  }
}

现在您可以使用以下方式启动您的应用程序:npm start 或:npm run start,您可以根据需要添加大量脚本。

如果您希望开发人员有更多的选择自由,请查看 how to make a cli tool yourself. its very easy and i feel using a scripting language gives more freedom then using any msbuild/C# code tooling. and cli arguments parsing npm package

这当然需要每个开发人员都安装节点。

我们在命令行中做了类似的事情:ourAppName start --watch --environment Development --config Debug(当然这些是默认标志)。 使用 nodejs,您可以生成新进程并为这些进程提供新的环境变量,因此它很容易被覆盖,甚至 appsettings this way

一种选择是使用 flubu(流利的生成器)。它是我们为使用 C# 代码构建项目和执行部署脚本而编写的开源 C# 库。

可在此处找到有关 flubu 的更多信息:

对于你的特殊情况,你必须写这样的东西:

public class BuildScript : DefaultBuildScript
{
    protected override void ConfigureTargets(ITaskContext session)
    {
        context.CreateTarget("run.dev")
                .AddCoreTask(x => x.Restore()) //// Optional to restore cli tool watch
                .AddCoreTask(x => x.ExecuteDotnetTask("watch")
                    .WithArguments("run")
                    .WithArguments("--enviroment", "Development"));
    }
}

然后到 运行 脚本,您将执行命令:dotnet flubu run.dev

更新:

您还可以添加到目标:.SetAsDefault()

然后你可以用命令dotnet flubu

执行脚本

您可以使用 dotnet CLI 调用 MSBuild。请参阅下面的示例任务 CopyTestJS。我在 ubuntu.

上使用 dotnet cli 版本 5.0.301
    <Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" />
    </ItemGroup>

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.1" />
    </ItemGroup>

    <ItemGroup>
        <Folder Include="wwwroot" />
    </ItemGroup>

    <!-- Example Custom Target -->
    <Target Name="CopyTestJS">
        <Copy SourceFiles="test.js" DestinationFolder="wwwroot" />
    </Target>

    </Project>

您可以使用 dotnet CLI 运行 任务。

dotnet msbuild -target:CopyTestJS