gpt4 book ai didi

visual-studio-2010 - 如何使用 VS2010 Web 部署包包含其他文件?

转载 作者:行者123 更新时间:2023-12-03 04:32:12 28 4
gpt4 key购买 nike

我正在使用 Visual Studio 2010 中的新 Web 打包功能进行测试,并遇到了一种情况,我使用预构建事件将所需的 .dll 复制到我的应用程序依赖于 API 调用的 bin 文件夹中。它们不能作为引用包含在内,因为它们不是可用于互操作的 COM dll。

当我构建部署包时,当我选择仅包含运行应用程序所需的文件的选项时,这些文件将被排除。有没有办法配置部署设置以包含这些文件?我没有找到任何关于此的好的文档。

最佳答案

很好的问题。我刚刚在 Web Deployment Tool (MSDeploy) : Build Package including extra files or excluding specific files 上发布了一篇非常详细的博客文章。 .

这是概要。包含文件后,我还将展示如何排除文件。

包含额外文件

将额外的文件包含到包中有点困难,但如果您熟悉 MSBuild,那么仍然没有什么大不了的,如果您不熟悉,请阅读本文。为了做到这一点,我们需要连接到收集文件进行打包的过程部分。我们需要扩展的目标称为 CopyAllFilesToSingleFolder。该目标有一个依赖属性 PipelinePreDeployCopyAllFilesToOneFolderDependsOn,我们可以利用它并注入(inject)我们自己的目标。因此,我们将创建一个名为 CustomCollectFiles 的目标并将其注入(inject)到进程中。我们通过以下内容实现这一点(记住在 import 语句之后)。

<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>

<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>

这会将我们的目标添加到流程中,现在我们需要定义目标本身。假设您有一个名为 Extra Files 的文件夹,位于 Web 项目的上一级。您想要包含所有这些文件。这是 CustomCollectFiles 目标,我们稍后讨论。

<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />

<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>

这里我所做的是创建项目 _CustomFiles 并在 Include 属性中告诉它拾取该文件夹及其下面的任何文件夹中的所有文件。如果您有任何机会需要从该列表中排除某些内容,请将排除属性添加到_CustomFiles

然后我使用此项目来填充 FilesForPackagingFromProject 项目。这是 MSDeploy 实际用来添加额外文件的项目。另请注意,我声明了元数据 DestinationRelativePath 值。这将确定它将被放置在包中的相对路径。我在这里使用了语句 Extra Files%(RecursiveDir)%(Filename)%(Extension) 。也就是说,将其放置在包中与 Extra Files 文件夹下相同的相对位置。

排除文件

如果您打开使用 VS 2010 创建的 Web 应用程序的项目文件,您会在其底部找到一行。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

顺便说一句,你可以在 VS 中打开项目文件。右键单击项目选择“卸载项目”。然后右键单击卸载的项目并选择“编辑项目”。

该声明将包括我们需要的所有目标和任务。如果您不确定是否在导入之后,我们的大多数自定义都应该在导入之后!因此,如果您有要排除的文件,则可以使用项目名称 ExcludeFromPackageFiles 来执行此操作。例如,假设您的 Web 应用程序中包含名为 Sample.Debug.xml 的文件,但您希望从创建的包中排除该文件。您可以将下面的代码片段放在导入语句之后。

<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>

通过声明填充此项,文件将自动被排除。请注意此处 FromTarget 元数据的用法。我不会在这里讨论这一点,但您应该知道始终要指定这一点。

关于visual-studio-2010 - 如何使用 VS2010 Web 部署包包含其他文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747081/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com