在 Visual Studio 生成项目时,会发现一些 dll 并没有被复制到输出目录,导致最终程序的执行错误...

发现与解决

检查了一下项目文件,发现是因为这些 dll 文件的引用其中一个叫做 嵌入互操作类型(EmbedInteropTypes)的属性被设为了 True,此时 复制本地 属性会被强制设为 False。所以 dll 文件自然也就不会被复制到输出目录了。

所以只要将 嵌入互操作类型 设为 False 后,重新生成项目即可解决。

image

更多

但是发现在引用这些 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 名称。

image

参考来源:https://stackoverflow.com/questions/46353244/embed-interop-types-to-false-in-nuget-package

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值