发现与解决
检查了一下项目文件,发现是因为这些 dll 文件的引用其中一个叫做 嵌入互操作类型(EmbedInteropTypes)的属性被设为了 True,此时 复制本地 属性会被强制设为 False。所以 dll 文件自然也就不会被复制到输出目录了。
所以只要将 嵌入互操作类型 设为 False 后,重新生成项目即可解决。
更多
但是发现在引用这些 dll 文件时,并没有与其它正常 dll 有什么不同的地方。
网上大概搜索了一下,好像发现产生这种问题的,名字中都包含 Interop.,且应该都是 COM 组件交互类,可能 VS 有自动识别吧。
NUGET
所以在使用这些 dll 文件制作 nuget 包时,需要注意,在新项目引用后,这些 dll 是不会正常生成到输出目录的。
从网上找了下脚本,可在 nuget 包的 tools 中,添加 install.ps1 脚本,并放入以下内容:
param($installPath, $toolsPath, $package, $project) $project.Object.References | Where-Object { $_.Name -eq "Interop.ShockwaveFlashObjects" } | ForEach-Object { $_.EmbedInteropTypes = $false }
其中 Interop.ShockwaveFlashObjects 是在项目中的引用名称,需修改为对应的 dll 名称。
参考来源:https://stackoverflow.com/questions/46353244/embed-interop-types-to-false-in-nuget-package