如何在 Visual Studio 的发布配置文件中包含动态生成的文件

Kol*_*kov 6 c# msbuild publish visual-studio

我们的构建会自动将 javascript/css 文件捆绑在一起,并在文件名中添加校验和以便于验证。因为这些是自动生成的并且名称会发生​​变化,所以我无法将它们包含在解决方案中。我试过查看 msdn 链接,但找不到所有可能标签的完整模式。

我发现但无法理解的东西: 如何在发布配置文件中编辑部署设置

我也在SO 上看到了这个答案,但我无法让它工作,它试图将它放在 obj 文件夹中,而不是发布文件夹中,同样,我找不到要尝试的模式并弄清楚如何重定向它。

理想情况下,最终目标是让发布配置文件将位于项目中 bundles 文件夹下的这些文件复制到 PublishProfile.pubxml 文件中指定的发布目录中的 bundles 文件夹中。

感谢您的任何帮助!

Kol*_*kov 8

我最终找到了一个有类似问题的人,他帮助我了解了我需要在链接的 SO 答案中更改什么我最终得到了以下结构,它从项目的根目录中获取所有 css 和 js 文件(看起来像你可以发明那些 JSFile 和 CSSFile 标签,它们只是稍后使用的名称),然后将它们发送到 DestinationRelativePath 标签,这需要 %(Filename)%(Extension) 位(否则它只是尝试创建一个文件称为束)。JSFile.Identity 似乎给出了一个文件列表。

这就是我的结果。请注意,CSS 具有 RecursiveDir 部分,但它实际上并没有做任何事情,并且 local publish 和 teamcity 都正确发布了所有内容。

<PropertyGroup>
    <CollectFilesFromContentDependsOn>
           AddFilesToDeploy;
           $(CollectFilesFromContentDependsOn);
      </CollectFilesFromContentDependsOn>
  </PropertyGroup>
  <!--Add files to deploy -->
  <Target Name="AddFilesToDeploy">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
      <Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
    </GetAssemblyIdentity>
    <ItemGroup>
      <JsFile Include="bundles\*.js" />
      <CssFile Include="bundles\*.css" />
      <FilesForPackagingFromProject Include="%(JsFile.Identity)">
        <DestinationRelativePath>bundles\%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
      <FilesForPackagingFromProject Include="%(CssFile.Identity)">
        <DestinationRelativePath>bundles\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您在此处分享您的解决方案,您可以将其标记为答案,以便它可以帮助遇到相同问题的其他社区成员。 (3认同)