相关疑难解决方法(0)

在构建任务之前是否预先安装了.NET Core CLI?

这个问题

我认为,当msbuild即将编译源代码文件,它产生的文件来构建,基于名单IncludeExclude项目的规则.

有没有办法在评估要编译的文件列表之前执行任务?

这是为了能够生成源代码文件并使其在构建中获取.

目前的研究和试验

我正在制作一个.NET Core CLI工具,必须在使用它的项目构建之前运行,因为它(CLI工具)生成一个必须包含在构建中的文件.

该项目是使用新.csproj系统创建的,而不是旧系统project.json.

与我的.NET Core CLI工具项目一起,我创建了一个用于测试目的的库项目.

如果我.csproj在测试库中添加它:

<ItemGroup>
    <DotNetCliToolReference Include="MyCliTool" Version="x.x.x" />
    <!-- here x.x.x is just a placeholder -->
</ItemGroup>

<Target Name="MyCliToolTarget" AfterTargets="Restore" BeforeTargets="BeforeBuild">
    <Exec Command="dotnet my-cli-tool" />
</Target>
Run Code Online (Sandbox Code Playgroud)

然后,如果之前不存在,则不会在编译中考虑CLI工具生成的文件.这意味着当文件存在时,它可以,但这也意味着第一次构建(克隆,清理或什么之后)总是会失败.

我尝试了几个不同的目标,BeforeTargets但我找不到让它工作的方法.我试图InitialTargetsProject节点中设置我的目标,但它也不起作用.我试图OutputsTarget节点的属性设置为CLI工具生成的文件名,但同样,它失败了.

我发现唯一有效的解决方案是手动添加Compile指令,如下所示:

<ItemGroup>
    <Compile Include="MyGeneratedFile.cs" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

此解决方案暂时没问题,但文件名可能会根据CLI工具选项而改变,这会使两个地方的文件名必须在更改时更新,如下所示:

<ItemGroup>
    <Compile Include="PATH\TO\CUSTOM_FILENAME_HERE.CS" />
    <DotNetCliToolReference Include="MyCliTool" Version="x.x.x" />
</ItemGroup>

<Target Name="MyCliToolTarget" …
Run Code Online (Sandbox Code Playgroud)

.net msbuild task dotnet-cli visual-studio-2017

12
推荐指数
1
解决办法
3116
查看次数

标签 统计

.net ×1

dotnet-cli ×1

msbuild ×1

task ×1

visual-studio-2017 ×1