如何在 Visual Studio 的发布配置文件中包含动态生成的文件
How to include dynamically generated files in Visual Studio's publish profile
我们的构建自动将 javascript/css 个文件捆绑在一起,并在文件名中添加校验和以便于验证。因为这些是自动生成的并且名称会更改,所以我无法将它们包含到解决方案中。我尝试查看 msdn 链接,但找不到所有可能标签的完整架构。
我发现但无法理解的东西:
How to Edit deployment settings in Publish Profile
我也看到了 对 SO 的回答,但我无法让它工作,它试图将它放在 obj 文件夹中,而不是 publish 文件夹中,然后,我找不到架构来尝试找出如何重定向它。
理想情况下,最终目标是让发布配置文件将位于项目 bundles 文件夹下的这些文件复制到 PublishProfile.pubxml 文件中指定的发布目录中的 bundles 文件夹。
感谢您的帮助!
我最终发现 someone 有类似的问题,他帮助我理解了我需要在链接的 SO 答案中更改的内容
我最终得到了以下结构,它从项目的根目录中获取所有 css 和 js 文件(看起来你可以发明那些 JSFile 和 CSSFile 标签,它们只是名称稍后使用),然后将它们发送到 DestinationRelativePath 标记,该标记需要 %(Filename)%(Extension) 位(否则它只会尝试创建一个名为 bundles 的文件)。 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>
我们的构建自动将 javascript/css 个文件捆绑在一起,并在文件名中添加校验和以便于验证。因为这些是自动生成的并且名称会更改,所以我无法将它们包含到解决方案中。我尝试查看 msdn 链接,但找不到所有可能标签的完整架构。
我发现但无法理解的东西: How to Edit deployment settings in Publish Profile
我也看到了
理想情况下,最终目标是让发布配置文件将位于项目 bundles 文件夹下的这些文件复制到 PublishProfile.pubxml 文件中指定的发布目录中的 bundles 文件夹。
感谢您的帮助!
我最终发现 someone 有类似的问题,他帮助我理解了我需要在链接的 SO 答案中更改的内容 我最终得到了以下结构,它从项目的根目录中获取所有 css 和 js 文件(看起来你可以发明那些 JSFile 和 CSSFile 标签,它们只是名称稍后使用),然后将它们发送到 DestinationRelativePath 标记,该标记需要 %(Filename)%(Extension) 位(否则它只会尝试创建一个名为 bundles 的文件)。 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>