nuspec contentFiles Example

前端 未结 4 748
囚心锁ツ
囚心锁ツ 2021-01-18 02:05

Yesterday NuGet 3.3 was released (release notes) and there is a new contentFiles element supported (docs). However, I can\'t seem to get this working.

I\'m using th

相关标签:
4条回答
  • 2021-01-18 02:10

    Element <contentFiles> has to be inside <metadata> according to NuSpec reference. So it should look like this:

    <?xml version="1.0" encoding="utf-8"?>
    <package>
        <metadata minClientVersion="3.3">
            <id>Hello.world</id>
            <version>1.0.0</version>
            <title>Greeting library</title>
            <authors>Timothy Klenke</authors>
            <description>Greetings for the world</description>
            <contentFiles>
                <files include="*" />
            </contentFiles> 
        </metadata>
    </package>
    
    0 讨论(0)
  • 2021-01-18 02:23

    I have a package that includes a common config file. This is for an enterprise NuGet repository. When I add the package to a project, the content folder structure is added to the package folder. However, when I build the project, the config file is not copied to the output folder (e.g., "\Project\bin\Debug").

    I have tried the following targets:

    • target="content\any\any"
    • target="contentFiles\any\any"

    Also, I have tried both:

    • buildAction="content"
    • buildAction="none"

    Here is the relevant nuspec entries:

    <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
      <metadata>
        <id>Utilities</id>
        ...
        <contentFiles>
          <files include="any/any/CommonAppConfig.config" buildAction="content" copyToOutput="true" flatten="true" />
        </contentFiles>
      </metadata>
      <files>
        <file src="Utilities.dll" target="lib\net452\Utilities.dll" />
        <file src="Utilities.pdb" target="lib\net452\Utilities.pdb" />
        <file src="CommonAppConfig.config" target="content\any\any" />
      </files>
    </package>
    
    0 讨论(0)
  • 2021-01-18 02:24

    @Timothy,

    You were right. It is a combination having a metadata/contentFiles element as well as a definition in the files element. I have a C# test utility library that needs to include PowerShell files in a projects output/bin folder when it is referenced using a PackageReference. I will include the XML below for you. I think you will be able to derive what you need from it.

    Special Note: Be sure to get your language and framework values right in the path (i.e. yours will something like cs/net45/YourFile.cs). I'm using any/any/MyFile.psm1 because I want the file to be treated as language and platform agnostic. If I don't, I get code analysis errors on build.

    Additionally, placing the files in a 'contentFiles' directory is important.

    (language and framework options defined in the .nuspec reference documentation) https://docs.microsoft.com/en-us/nuget/reference/nuspec#including-content-files

    <package>
      <metadata>
        <id>SomeLibrary</id>
        <version>$version$</version>
        <title>SomeLibrary</title>
        <authors>Somebody</authors>
        <owners>Somebody</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Some library that does things I enjoy.</description>
        <releaseNotes />
        <copyright>Copyright 2017</copyright>
        <tags>PowerShell Testing</tags>
        <contentFiles>
          <files include="any/any/SomePS.psd1" buildAction="none" copyToOutput="true" />
          <files include="any/any/SomePS.psm1" buildAction="none" copyToOutput="true" />
        </contentFiles>
      </metadata>
      <files>
        <file src="*.dll" target="lib\net461" />
        <file src="*.pdb" target="lib\net461" />
        <file src="SomePS.psd1" target="contentFiles\any\any" />
        <file src="SomePS.psm1" target="contentFiles\any\any" />
      </files>
    </package>
    
    0 讨论(0)
  • 2021-01-18 02:31

    The "/" matters in the node. It will not work if used:

    <files include="any/any/x.dll" buildAction="None" copyToOutput="true" flatten="true" />
    

    It must be:

    <files include="any\any\x.dll" buildAction="None" copyToOutput="true" flatten="true" />
    

    But it doesn't work for .NET framework??!

    0 讨论(0)
提交回复
热议问题