如何在csproj NuGet包中添加文件到构建文件夹,而无需.nuspec文件

6
我已经为我的通用项目(一个NuGet包)安装了AsyncUsageAnalyzers,并希望在所有依赖于它的软件包/应用程序中执行规则。 我已更改UseConfigureAwait规则的严重性,并创建了.ruleset文件。
我在https://dev59.com/PGIj5IYBdhLWcg3wb0rX#20271758上阅读到,我需要一个具有特定结构的NuGet包。这种说法在https://dev59.com/7qXja4cB1Zd3GeqPKwIK#46115423得到了确认。
现在我有:
build/Common.ruleset
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="My common analyzer rules" Description="The rules that are enforced on all of my projects" ToolsVersion="10.0">
  <Rules AnalyzerId="AsyncUsageAnalyzers" RuleNamespace="AsyncUsageAnalyzers">
    <Rule Id="UseConfigureAwait" Action="Error" />
  </Rules>
</RuleSet>

build/My.Package.Id.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)Common.ruleset</CodeAnalysisRuleSet>
    </PropertyGroup>
</Project>

在我的.csproj文件中
<Import Project="build\My.Package.Id.targets" />

我的问题是:我已经完成了这个步骤,并且规则已经正确应用于我的项目,但是如何将位于build/下的文件添加到NuGet包中,在build/文件夹内? 我知道可以使用.nuspec文件来实现,但我想使用新的.csproj语法来实现。

1个回答

10

很抱歉我发帖太快了,我就在我的眼前找到了解决方案:

在页面https://learn.microsoft.com/en-us/dotnet/core/tools/csproj#nuget-metadata-properties中,MarkPflug在评论中给出了翻译,并引用https://learn.microsoft.com/en-us/nuget/schema/msbuild-targets#pack-scenarios作为参考。

在我的情况下,我需要使用PackagePath如下(Content也可以工作,但正如Martin Ullrich所指出的那样,None在这里是更好的选择):

  <ItemGroup>
    <None Include="build\**" Pack="True" PackagePath="build\" />
  </ItemGroup>

1
如果项目中已经有该项(可能是作为“无”构建操作),则可以使用<None Update="…" Pack="true" … />代替内容包含,并且不要为同一文件添加多个项,这可能会在更改或移动内容时使VS混淆。 - Martin Ullrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接