我有一个带有服务库和控制台应用程序的WCF项目,用于自托管。服务应用程序需要托管和非托管库,我根据此SO答案使用NuGet包含Where to place dlls for unmanaged libraries?
在独立测试库时,此工作正常 - 所有库都正确复制到服务库输出文件夹。但是,在构建控制台应用程序时,非托管dll不会被复制到控制台应用程序的输出文件夹中,并且应用程序在运行时会失败。
问题:如何将非托管dll提升/复制到托管服务库的任何应用中?我知道我可以手工完成但是想要一个自动化的解决方案,因为我可能至少会添加IIS主机,并且不想冒险在每次构建时忘记手动复制。
这是我的.nuspec文件:
<?xml version="1.0"?>
<package>
<metadata>
<id>XyzLibrary</id>
<version>1.0.0</version>
<authors>Authors</authors>
<description>Description</description>
<releaseNotes>Notes</releaseNotes>
</metadata>
<files>
<file src="XyzLibraryNet.dll" target="lib\net461\"/>
<file src="XyzLibrary.dll" target="unmanaged"/>
<file src="build\XyzLibrary.targets" target="build" />
</files>
</package>
这是.targets文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyMyPackageFiles" AfterTargets="AfterBuild">
<ItemGroup>
<MyPackageFiles Include="$(MSBuildProjectDirectory)..\unmanaged\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(MyPackageFiles)" DestinationFolder="$(OutputPath)">
</Copy>
</Target>
</Project>
答案 0 :(得分:0)
它适用于服务库,因为.targets文件正被导入到项目文件中,并且正在执行复制命令。如果您在控制台应用程序中需要它们,您可以:
在这三个选项中,最容易实现的是添加后期构建步骤。这可以通过打开项目属性,选择构建事件选项卡并添加如下内容来完成:
copy ..\ServiceLibrary\bin\$(Configuration)\*.dll $(OutputPath)