dotnet build --- 为每个包含特定字符串的文件输出错误

问题描述 投票:0回答:1

我正在尝试在 .csproj 中创建一个 Before Build 任务,如果文件包含“特定字符串”,它将为路径(和子文件夹)中的每个文件输出错误。 该项目是使用“dotnet build”cli 命令构建的。 以前有人做过类似的事情吗?

更多详细信息: 我正在使用 SDK 项目为数据库构建

dacpac
<Project Sdk="MSBuild.Sdk.SqlProj/2.6.0">

问题:美丽的

dotnet build
(及其背后相应的MsBuild任务)默默地无法将任何具有
dacpac
的存储过程包含在
CREATE OR ALTER PROCEDURE [schema].[sp_name]
中。它对于简单的
CREATE PROCEDURE
来说效果很好。

问: 我更愿意避免在构建时(管道)出现错误而导致静默失败。我知道字符串搜索

CREATE OR ALTER
并不理想,但它可以完成任务。

.net build task
1个回答
0
投票

我想出了一个还算不错的解决方案:

<Target Name="CheckCreateOrAlter" BeforeTargets="BeforeBuild">
        <Exec Command='findstr /I /S /N /C:"create or alter" /D:".\Database" *.sql' ConsoleToMSBuild="true" IgnoreExitCode="true">
            <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
        </Exec>
        <Error Condition="'$(OutputOfExec)' !='.\Database:'" Text="CREATE OR ALTER IS NOT ALLOWED: $(OutputOfExec)" />
    </Target>

这不会列出每个文件的单个错误,而是列出所有发生的一个错误。 我不想创建 CLI 工具或 MsBuild 任务,因此,如您所见,我正在使用

findstr
实用程序。这将通过列出搜索到的目录来启动输出。因此,如果输出只是目录,则未找到包含该字符串的文件。这就是为什么错误条件是
'$(OutputOfExec)' !='.\Database:'

它可能不是最漂亮的东西,但它可以完成工作。

© www.soinside.com 2019 - 2024. All rights reserved.