如何将其他文件发布到bin文件夹中

时间:2018-09-19 15:38:52

标签: c# asp.net visual-studio

我的.net Web应用程序项目还包括一些非托管dll作为附加文件。 这些子文件夹中有几个层次。

发布此项目时,我需要将这些文件与所有其他二进制文件一起复制到bin文件夹中。

无论我尝试什么设置,我都能得到的最好的结果是将它们发布到现有文件夹结构中,而不是我需要的位置。

我创建了一个PostBuild事件来复制文件,这在本地构建时有效,但在发布到服务器时无效。我无法使PostPublish事件以相同的方式工作。

还有另一种方法可以实现这一目标吗?

请注意,这与上一个问题相似但不相同: Publish unmanaged DLL from referenced project

3 个答案:

答案 0 :(得分:2)

尝试使用发布后任务。

您可以创建要复制的项目组:

<ItemGroup>
  <binFilesToCopy Include="$(OutDir)\somepath\to\yourexternalDLLFolder\*" />
  <!-- Add more folders/files you want to copy here -->
</ItemGroup>

然后在发布后添加目标:

<Target Name="AfterPublish">
    <Copy SourceFiles ="@(binFilesToCopy)" DestinationFolder ="$(OutDir)\bin" />
</Target>

我主要是从内存中执行此操作的,因此请仔细检查语法,但会让您明白。

答案 1 :(得分:0)

您可以在文件的属性中将Copy to output directory设置为Copy always,也可以编辑解决方案文件,展开所需文件的xml标记,然后将<CopyToOutputDirectory>Always</CopyToOutputDirectory>添加为子标记

答案 2 :(得分:0)

我有类似的设置。我的解决方案中有2个项目,一个是.NET Core,另一个是C ++。当我要发布dotnetcoreapp2.2时,我想包括另一个项目中的预编译C ++ DLL。 @JuanR的答案对我不起作用,尽管它已经非常接近我的版本了。看来<ItemGroup>必须位于<Target>标记中。

<Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
  <ItemGroup>
    <DataModelFiles Include="$(ProjectDir)..\MyCppProject\bin\Release\MyCppProject.dll" />
  </ItemGroup>
  <Copy SourceFiles="@(DataModelFiles)" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="false" />
</Target>