在dotnet-publish中,属性替代是否传播到所有其他引用的项目?可以控制吗?

我正在尝试构建一个具有覆盖属性的项目。

dotnet publish MyProject.csproj -f netcoreapp3.0 -c Release -r win-x86 /p:CopyOutputSymbolsToPublishDirectory=false /p:OutputType=winexe

但是,它会导致classlib依赖项中的生成错误。

error CS5001: Program does not contain a static 'Main' method suitable for an entry point

我只能假设/p:OutputType=winexe正在传播并覆盖其属性。有办法阻止这种情况吗?我可以让该替代仅适用于目标项目吗?

奇怪的是,如果我在没有/p:OutputType=winexe的情况下进行构建,然后立即在 /p:OutputType=winexe中进行了构建,则它会成功。 (我猜这些依赖项是构建和缓存的。)

PUXI3230 回答:在dotnet-publish中,属性替代是否传播到所有其他引用的项目?可以控制吗?

我将其作为issue发布到GitHub并收到了this reply

  

在命令行中指定属性会使该属性设置为global property;默认情况下,全局属性由构建为ProjectReference的项目继承(或使用MSBuild内部的MSBuild任务)。

     

没有简单的方法可以禁用此功能,但是有一些选项:

     
      
  1. 使用其他项目未使用的其他属性(可能是MyProjectOutputType),并根据OutputType中的属性设置MyProject.csproj
  2.   
  3. 告诉MyProject.csproj,以避免通过在其所有OutputType上设置元数据UndefineProperties="OutputType"来避免将ProjectReferences元数据传递给它的引用(可能通过item definition而不是在每个ProjectReference XML节点上)
  4.   
本文链接:https://www.f2er.com/3122332.html

大家都在问