Visual Studio 如何指定. net模板中包含的文件

ryevplcw  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(146)

我有一个Visual Studio解决方案,我正试图用它来制作模板。我有一个包含template.json文件的.template.config目录,还有一个SolutionTemplate.nuspec。我正在尝试制作一个 solution 模板,即该模板创建一个包含多个项目的解决方案。目录结构为:

- .git
- .template.config
    - template.json
- template_content
    - proj_one_dir
        - files
    - proj_two_dir
        - files
    - Template.sln
- SolutionTemplate.nuspec
- pipeline.yml

template.json的源代码部分为:

{
    "sources":[{
    "modifiers": [{
      "exclude":[
        "**/[Bb]in/**",
        "**/[Oo]bj/**",
        ".template.config/**/*",
        "**/*.filelist",
        "**/*.user",
        "**/*.lock.json",
        ".git/**"
      ]
    }],
    "source": "./template_content",
    "target": "./"
  }]
}

如您所见,我试图阻止git和template config目录等内容包含在输出中。
.nuspec文件内容为:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>Our.Microservice.Template</id>
    <version>1.0.0</version>
    <description>
      Blah blah blah.
    </description>
    <authors>Me</authors>
    <license type="expression">Apache-2.0</license>
    <packageTypes>
      <packageType name="Template" />
    </packageTypes>
  </metadata>
</package>

如果我运行nuget.exe pack "SolutionTemplate.nuspec",那么当我使用模板时,最终输出只包括 * 所有内容 *。

<files>
    <file   src="template_content\**\*.*" 
            exclude="**\bin\**\*.*;**\obj\**\*.*;**\*.nuspec;**\*.nupkg;**\*.suo;docs\**;.git\**;**\.gitignore;.vs\**;.vscode\**;" 
            />
</files>

这看起来确实有效。但是如果这是控制包含/排除哪些文件的预期方式,那么template.json中的源代码部分是做什么的呢?
挑选最终作为模板内容的文件的正确方法是什么?

2ic8powd

2ic8powd1#

我已经自己找到了答案。
我没有真正意识到这个过程有两个阶段。
1.将文件打包到Nuget包中
1.使用模板(在某种程度上,提取Nuget的内容)
为了控制进入Nuget包的内容,我们使用YourNuspecFile.nuspec中的<files>部分。
为了控制如何使用Nuget包中的文件生成最终结果,我们使用template.json"sources":部分。
我没有找到任何文件明确指出这一点,这对许多人来说可能是显而易见的,但我设法在脑海中将两者混为一谈。
我也意识到我的json没有意义。
下面是我的.nuspec文件的files部分:

<files>
    <file   src=".template.config\**\*.*"
            target=".template.config" />
    <file   src="docs\**\*.*"
            target="docs" 
            exclude="docs\dotnet_templates\**\*.*;docs\images\**\*.*;" />
    <file   src="src\**\*.*"
            target="src"
            exclude="**\bin\**\*.*;**\obj\**\*.*;**\*.nuspec;**\*.nupkg;**\*.suo;**\*.sln;" />
    <file   src="test\**\*.*"
            target="test"
            exclude="**\bin\**\*.*;**\obj\**\*.*;**\*.nuspec;**\*.nupkg;**\*.suo;**\*.sln;" />
    <file   src="README_FOR_TEMPLATE.md" 
            target="README.md" />
    <file   src="Templates.Microservice.Template.sln" 
            target="Templates.Microservice.sln" />
    <file   src=".gitignore" 
            target=".gitignore" />
</files>

下面是我的'template.json'的源代码部分:

{"sources":[{
    "source": "./docs/",
    "include": [
      "**/*"
    ],
    "target": "./docs/"
  },
  {
    "source": "./src/",
    "include": [
      "**/*"
    ],
    "target": "./src/"
  },
  {
    "source": "./test/",
    "include": [
      "**/*"
    ],
    "target": "./test/"
  },
  {
    "source": "./",
    "include": [
      "README.md",
      "Templates.Microservice.sln",
      ".gitignore"
    ],
    "target": "./"
  }]
}

正如您所看到的,我已经在.nuspec文件中进行了一些重命名,但我知道这些也可以在template.json文件中完成(需要更多的学习)。

相关问题