我的.net Web应用程序项目还包括一些非托管dll作为附加文件。 这些子文件夹中有几个层次。
发布此项目时,我需要将这些文件与所有其他二进制文件一起复制到bin
文件夹中。
无论我尝试什么设置,我都能得到的最好的结果是将它们发布到现有文件夹结构中,而不是我需要的位置。
我创建了一个PostBuild事件来复制文件,这在本地构建时有效,但在发布到服务器时无效。我无法使PostPublish事件以相同的方式工作。
还有另一种方法可以实现这一目标吗?
请注意,这与上一个问题相似但不相同: Publish unmanaged DLL from referenced project
答案 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>