VS2010如何在项目中包含文件,在构建或发布期间自动将它们复制到构建输出目录


73

任务是形成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

Answers:


107

存在并且不依赖于构建后事件。

将文件添加到您的项目,然后在文件中属性中的“复制到输出目录”下选择“始终复制”或“如果更新则复制”。

参见MSDN


17
有什么机制可以控制输出子目录?我已提交foo.exe解决方案,\Tools\Foo\foo.exe并在发布过程中将foo.exe其复制到bin\Tools\Foo\foo.exe。第三方代码需要foo.exe才能直接放置到bin文件夹中。我已经关闭Namespace ProviderToolsFoo目录的属性。但这无济于事。我不想放置foo.exe到项目根目录。但是,如果按照我的理解,如果没有其他变体,这将是唯一的解决方案?

1
您可以添加一个解决方案文件夹并向其中添加文件-我相信它将随后被复制到bin目录中。
Oded

不,很遗憾,不能控制构建/发布包含在解决方案文件夹中的文件。我已经包含foo.exe了项目根目录。不是很漂亮,但是可以用:)谢谢。

VS2015在这里。如果您将文件放置在MVC项目之外(可能作为解决方案的一部分放置在另一个项目中),则该文件不会与此一起发布。sedodream.com/…帮助我解决了这个问题。简短版:在中添加Properties\PublishProfiles\(pubname).pubxml新条目<PropertyGroup><PipelineCollectFilesPhaseDependsOn>。(这将仅用于此发布配置文件,而不用于构建或其他发布配置文件!)
MilConDoin

1
在解决方案资源管理器中,单击项目,然后单击“添加”>“新文件夹”。将文件拖到该文件夹​​中。然后构建>清洁解决方案和构建>重建解决方案。现在,在构建时,输出中会有一个包含该文件的新文件夹。
sinDizzy

20

我只需要在构建过程中推送文件,因此我只添加了一个构建后事件命令行条目,如下所示:

Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"

您可以通过在解决方案资源管理器中右键单击您的项目,然后单击属性>构建事件来进行设置


4
如果您使用这种方法,则建议您进行以下修改:Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"
codechurn 2014年

如果我在网站上使用发布,它将复制到部署目录吗?(到目前为止,我认为使用publish
David

@codehurn-根据您的建议进行更新。谢谢!
马修·皮亚特

6

在解决方案资源管理器中,请选择要复制到输出目录的文件并分配两个属性:-生成操作=内容-复制到输出目录=始终复制

这将达到目的。


10
仅在项目中引用了文件的情况下才有效,而在解决方案资源管理器中通过“解决方案项”列表在解决方案中没有引用该文件的情况下。
codechurn 2014年

3
  1. 将文件添加到您的项目。
  2. 转到该文件的属性。
  3. 将“生成操作”设置为“嵌入式资源”。
  4. 将“复制到输出目录”设置为“始终复制”。

这仅适用于.NET还是与天真的相关?
serup

@serup用于Visual Studio。
5ervant

0

就我而言,设置Copy to Output DirectoryCopy Always和Build并不能解决问题,而Rebuild可以解决。

希望这对某人有帮助!


0

尝试直接从您的服务/网络项目中添加对丢失的dll的引用。将引用添加到其他项目对我不起作用。

发布Web应用程序时,我只需要这样做,因为它没有复制所有必需的dll。


0

就像我的神经病患者同志可能在这里碰巧那样,我假设对于Web项目,如果链接文件是外部.config文件,那么“输出目录”将是web.config所在的目录,即您的Web项目的根。回想起来,将链接的文件复制到root / bin文件夹中完全不奇怪。

因此,如果它是一个appSettings包含文件,则web.config的open标签为

<appSettings file=".\bin\includedAppSettingsFile.config">

咄。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.