菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
363
0

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

原创
05/13 14:22
阅读数 80962

发现与解决

检查了一下项目文件,发现是因为这些 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/200
363 点赞
0 评论
收藏