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

时间:2017-05-12 18:11:20

标签: c# visual-studio msbuild publish

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

我发现的东西但是没能理解: How to Edit deployment settings in Publish Profile

我也看过this回答SO,但是我无法让它工作,它试图把它放在obj文件夹中,而不是发布文件夹,再次,我可以找不到架构来试图找出如何重定向它。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我最终找到了一个类似问题的someone,他帮我理解了我需要在链接的SO答案中改变的内容 我最终得到了以下结构,它从项目的根目录中获取所有css和js文件(看起来你可以创建那些JSFile和CSSFile标签,它们只是稍后要使用的名称),然后将它们发送到DestinationRelativePath标记,该标记需要%(Filename)%(扩展)位(否则它只是尝试创建一个名为bundle的文件)。 JSFile.Identity似乎提供了一个文件列表。

这就是我最终的结果。请注意,CSS具有RecursiveDir部分,但它实际上没有做任何事情,本地发布和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>