繁体   English   中英

msbuild 何时使用新的“隐式”csproj 格式确定要构建的文件列表?

[英]When does msbuild determine list of files to build, using new 'implicit' csproj format?

Visual Studio 2019,使用新的“隐式”C# 项目格式,您不会在 csproj 中包含文件。

有一个预构建作业会生成两个.cs 文件,但显然当 msbuild 调用 csc (在预构建事件之后)时,它不会将这两个文件包含在要编译的文件列表中。 我什至尝试过引入 30 秒的延迟。 所以看起来 msbuild 在运行预构建事件之前修复了文件列表。

显然,在第一次之后这不是问题,但在构建服务器或新的开发盒上并不是很好。

有一个干净的解决方案吗?

如果还没有这些文件,则需要手动将这些文件添加到编译项目中:

<Target Name="GenerateStuff" BeforeTargets="BeforeBuild">
  <Exec Command="generate foo.cs" />
  <ItemGroup>
    <Compile Include="foo.cs" Exclude="@(Compile)" />
  </ItemGroup>
</Target>

此表示法还支持通配符( Include="gen*.cs"

找到了解决方案:

将 InitialTargets 属性添加到项目元素:

<Project Sdk="Microsoft.NET.Sdk" InitialTargets="Generation">

将 PreBuild 更改为此

<Target Name="Generation">
  <Exec Command="whatever" />
</Target>

(请注意,如果您打开了 Visual Studio,这几乎可以很好地工作,因为即使没有构建文件也会自动重新出现!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM