VS2010 如何在项目中包含文件,在构建或发布过程中自动将它们复制到构建输出目录
Posted
技术标签:
【中文标题】VS2010 如何在项目中包含文件,在构建或发布过程中自动将它们复制到构建输出目录【英文标题】:VS2010 How to include files in project, to copy them to build output directory automatically during build or publish 【发布时间】:2011-06-03 13:09:59 【问题描述】:任务是形成 Visual Studio 2010 项目,以便在任何构建或发布期间将一些 foo.exe
实用程序复制到输出 (bin
) 目录。
早期我在 .csproj(MSBuild 文件)中完成了 PostBuildEvent 任务:
<PropertyGroup>
<PostBuildEvent>
Copy "$(SolutionDir)Tools\foo.exe" "$(ProjectDir)$(OutDir)foo.exe"
</PostBuildEvent>
</PropertyGroup>
但这并不是普遍的。在发布期间 (Visual Studio 2010) foo.exe
出现在 bin
目录中,但不会复制到输出发布目录。也许我做的一切都完全错了,并且有标准机制可以将文件包含在以后的项目中,在构建或发布期间,复制到bin
?
【问题讨论】:
【参考方案1】:还有另一种方法可以复制解决方案“外部”的项目(这在技术上也可以复制解决方案项目)。
在解决方案资源管理器中,右键单击您的项目并选择“添加...现有项目”。找到有问题的文件(可以是任何类型,而不仅仅是代码),然后单击“添加”按钮旁边的下拉箭头并选择“添加为链接”。
在解决方案资源管理器中,选择刚刚添加到项目中的项目,并将Copy to Output Directory
属性更改为Copy if newer
或Copy always
,视情况而定。
【讨论】:
【参考方案2】:-
将文件添加到您的项目中。
转到该文件的属性。
将“构建操作”设置为嵌入式资源。
将“复制到输出目录”设置为始终复制。
【讨论】:
这仅适用于 .NET 还是与 naitive 相关? @serup 适用于 Visual Studio。 发布应用程序时它是否工作我想在发布时保留 abc.txt 文件【参考方案3】:我的神经受损的同志们可能会在这里偶然发现它,我曾假设,对于 Web 项目,如果链接文件是外部 .config 文件,那么“输出目录”将与 web.config 相同的目录存在于,即您的 Web 项目的根目录中。回想起来,将链接文件复制到 root/bin 文件夹中是完全不足为奇的。
因此,如果它是一个 appSettings 包含文件,那么您的 web.config 的打开标签将是
<appSettings file=".\bin\includedAppSettingsFile.config">
呃。
【讨论】:
【参考方案4】:尝试直接从您的服务/网络项目中添加对缺失 dll 的引用。添加对不同项目的引用对我不起作用。
我只需要在发布我的网络应用程序时这样做,因为它没有复制所有必需的 dll。
【讨论】:
【参考方案5】:我只需要在构建期间推送文件,所以我只是添加了一个构建后事件命令行条目,如下所示:
Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"
您可以通过在解决方案资源管理器中右键单击您的项目,然后在属性 > 构建事件中进行设置
【讨论】:
如果你使用这种方式,我会推荐如下修改:Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"
如果我在我的网站上使用发布,它会复制到部署目录吗? (到目前为止,我认为这在使用发布时不起作用)
@codehurn -- 根据您的建议更新。谢谢!【参考方案6】:
存在且不依赖于构建后事件。
将文件添加到您的项目中,然后在 文件 属性中的“复制到输出目录”下选择“始终复制”或“如果更新则复制”。
见MSDN。
【讨论】:
有控制输出子目录的机制吗?我已将foo.exe
放入\Tools\Foo\foo.exe
的解决方案中,并在发布期间将foo.exe
复制到bin\Tools\Foo\foo.exe
。第三方代码需要将 foo.exe 直接放到bin
文件夹中。我已经为Tools
和Foo
目录关闭了Namespace Provider
属性。但这无济于事。我不想将foo.exe
放在项目根目录中。但是,如果没有任何其他变体,据我所知,这将是唯一的解决方案?
您可以添加解决方案文件夹并将文件添加到其中 - 我相信它将被复制到 bin 目录。
不,遗憾的是,无法控制包含在解决方案文件夹中的文件的构建/发布。我已将foo.exe
包含在项目根目录中。不是很漂亮,但它可以工作:) 谢谢。
VS2015 在这里。如果您将文件放置在 MVC 项目之外(可能在另一个项目中作为解决方案的一部分),则它不会与此一起发布。 sedodream.com/… 帮我解决了这个问题。简短版:将新条目添加到您的 Properties\PublishProfiles\(pubname).pubxml
<PropertyGroup><PipelineCollectFilesPhaseDependsOn>
。 (这将仅用于此发布配置文件,而不用于构建或其他发布配置文件!)
在解决方案资源管理器中单击项目,然后单击添加>新建文件夹。将您的文件拖到该文件夹中。然后构建>清洁解决方案和构建>重建解决方案。当我构建时,输出现在有一个包含该文件的新文件夹。【参考方案7】:
在解决方案资源管理器中,请选择要复制到输出目录的文件并分配两个属性: - 构建动作 = 内容 - 复制到输出目录 = 始终复制
这样就可以了。
【讨论】:
这仅在项目中引用文件时有效,而不是通过解决方案资源管理器中的“解决方案项”列表在解决方案中引用。 @codechurn 也有办法对解决方案项执行此操作 - 请参阅my answer【参考方案8】:在我的例子中,将 Copy to Output Directory
设置为 Copy Always
和 Build 并没有解决问题,而 Rebuild 可以。
希望这对某人有所帮助!
【讨论】:
以上是关于VS2010 如何在项目中包含文件,在构建或发布过程中自动将它们复制到构建输出目录的主要内容,如果未能解决你的问题,请参考以下文章
如何不在生成的命名空间中包含 Visual Studio 项目文件夹名称
如何在 SharePoint WebPart 中包含 JavaScript 文件?