我有一个WinForms应用程序,我通过ClickOnce发布。此应用程序包括Accord FFMPEG库,它们作为参考包含在内。
FFMPEG NuGet包文件夹包含一个.targets文件,其中包含正确操作FFMPEG库(avcodec.dll,avformat.dll,avutil.dll)所需的各种dll。在构建项目时,这些文件将复制到\ bin文件夹中。这是通过在.csproj中包含这一行来完成的:
Import Project="..\packages\Accord.Video.FFMPEG.3.3.0\build\Accord.Video.FFMPEG.targets" Condition="Exists('..\packages\Accord.Video.FFMPEG.3.3.0\build\Accord.Video.FFMPEG.targets')"
但是,通过ClickOnce发布应用程序时,这些文件不包含在已发布的文件夹中。有没有办法运行导入项目任务并将文件添加到已发布的文件夹中?
答案 0 :(得分:1)
不幸的是,我没有设法使用.targets文件。我的解决方案最终是将所需的dll复制到部署文件夹并将其包含在清单中,如下所示。
<ItemGroup Label="FFMPEG DLL">
<ClickOnce Include="..\packages\Accord.Video.FFMPEG.3.3.0\build\*.dll">
<InProject>false</InProject>
<Visible>false</Visible>
</ClickOnce>
</ItemGroup>
<Target Name="BeforeBuild">
<CreateItem Include="@(ClickOnce)" AdditionalMetadata="TargetPath=%(FileName)%(Extension);IsDataFile=false">
<Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
</CreateItem>
</Target>
<Target Name="BeforePublish">
<Touch Files="@(IntermediateAssembly)" />
</Target>
这是使用.NET 4.6.1和VS2017。