- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建在我的项目中的插件 .dll 中实现的类的实例以进行类型发现。我收到此异常:
Could not load type 'Action' from assembly 'SquidReports.DataCollector.Plugin.BES, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
这正是我使用的方法签名: https://msdn.microsoft.com/en-us/library/d133hta4(v=vs.110).aspx
换句话说,我试图根据程序集名称和类名称生成对象,如下所示:
object modelObject = Activator.CreateInstance((string)modelInfo.AssemblyName, (string)modelInfo.ModelName);
这里要注意的一个重要部分是,我使用的是程序集的“短”名称,而不是“完整”名称(包括版本、文化和 PublicToken)。但是,MSDN 明确指出:
'assemblyName' can be either of the following: The simple name of an assembly, without its path or file extension.
For example, you would specify TypeExtensions for an assembly whose path and name are .\bin\TypeExtensions.dll.
The full name of a signed assembly, which consists of its simple name, version, culture, and public key token; for example, "TypeExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=181869f2f7435b51".
具体来说,我正在尝试创建在程序集“SquidReports.DataCollector.Plugin.BES”中定义的类“Action”的实例。我在尝试创建实例的同一个 *.cs 文件的顶部将此程序集明确引用为 using 指令。
我已经尝试了以前问题/答案中的以下建议:
清理你的解决方案,重建并重试这似乎适用于某些 ASP.NET 项目,但这是普通的旧控制台应用程序。
检查配置文件中引用的程序集同样,这是一个简单的控制台应用程序,仅在同一解决方案的不同项目中使用 GAC 和库
<强>1。确保程序集位于正确的工作目录中:
我们在这里...
<强>2。确保程序集与磁盘上的版本相同
是的...
<强>3。最终推荐使用 fuslogvw.exe。
我没有使用该工具的经验,但有一件事我确实觉得很奇怪。运行调试 session 后,我的程序集的长名称和短名称版本都出现了:
我查看了两个日志。
短名称版本似乎会产生一些警告:
=== Pre-bind state information ===
LOG: DisplayName = SquidReports.DataCollector.Plugin.BES Partial) WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: SquidReports.DataCollector.Plugin.BES | Domain ID: 1
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
...但它以加载成功结束,并且在正确的位置清楚地提到了我的程序集:
LOG: Attempting download of new URL file:///C:/Source/C#/SquidReports/SquidReports.DataCollector/bin/x86/Debug/SquidReports.DataCollector.Plugin.BES.DLL.
长名称版本的日志不包含任何可疑消息。
还有什么想法吗?
编辑:这是 Action 类的最小定义。它纯粹是一个模型类。
public class Action : ICollectible
{
public Action()
{
// Empty constructor
}
public Action(int actionID, string siteID, string name)
{
this.ActionID = actionID;
this.SiteID = siteID;
this.Name = name;
}
public int ID { get; set; } // Identity ID assigned by DB
[Key]
public int ActionID { get; set; } // Identity ID assigned by API
public string SiteID { get; set; }
public string Name { get; set; }
}
ICollectible 接口(interface)和 [Key] 属性是另一个程序集的一部分。不确定这是否会产生影响?
编辑 2: 正如 Erik 在下面指出的,显然我也对这个 OTHER 程序集进行了完全相同的检查。
最佳答案
如您所见,正在加载程序集,只是找不到类型 (Action
)。您必须指定类型的全名 Namespace.Action
以便 .NET 找到它。
关于c# - 激活器.CreateInstance : Could not load type from assembly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889117/
我目前正在使用发现的重力脚本 here为了在我的网页上创建重力效果,我正在本地开发 atm。 我的问题是,重力效果的激活似乎是在鼠标移动时进行的,而我需要它在文档准备好时才触发。 google.cod
我正在尝试关注 Railsbridge Intallfest 并尝试将我的第一个 Rails 应用程序部署到 heroku。我不断收到以下错误消息: Gem::LoadError: Specified
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
Home-tab 是默认选中的,但是它的颜色是灰色的:( Home Bla Contact
我没有得到它的工作,我不知道为什么......遗憾的是其他问题 + 答案没有帮助。 测试设备: iPhone 6 iPad 2 相关代码: override func viewWillTransiti
我试图加载一个 View ,就像用户已经按下 UISearchBar 一样。我希望 SearchController 加载顶部的 UISearchBar 以及取消按钮。 我已经试过了: func ac
试图在 if whiteDotDist < centerRadius - whiteDotRadius 时获取代码执行它下面的所有代码都是事件的,并且当它下面的代码被执行时它再次变为非事件状态直到if
我正在使用 anaconda python。所以每次,在我的 mac 终端中,我输入终端命令: source /Users/mylaptop/anaconda/bin/activate /Users/
在我的 Angular 项目中,我有这种代码: this.swUpdate.available.subscribe(() => { ... }); 它工作正常,但给了我关于 activated 被
我想弄清楚 Julia 包是如何工作的,因为我喜欢容器化环境。我真的很挣扎。 在 python 中,我会做类似 conda create env --name ds 的事情创建环境然后安装容器化包我会
我的宏中有一些代码如下 ChDir File_pth Workbooks.Open filename:= File_pth & "\" & open_tkt Workbooks.Open filena
长话短说,我有两张纸,一张是“原始数据”,另一张是“结果”。我试图让结果表从“原始数据”表的每第七行中提取文本或数字,因此“结果”中的 A1 将是原始数据中的 A1,“结果”中的 A2 将是“原始数据
我不知道如何做到这一点,或者我是否可以做到这一点。我有一个 jQuery UI Accordion,多个部分,每个部分包含多个 anchor 标记,每个 anchor 标记都有一个唯一的字符串 id。
我不敢相信我还没有找到任何关于此的文档,但我想知道如何命令键盘激活并接收来自它的输入。我可以找到在编辑文本字段时操作弹出键盘的所有示例。谢谢 最佳答案 您还可以使用 UIKeyInput 协议(pro
我正在尝试为我的 Electron 应用程序生成NSIS安装程序的日志。为此,我创建了一个文件'logging.nsh'来定义LogSet和LogText宏。 以下是logging.nsh文件的代码:
几周前,我开始使用 typescript 和 knockoutJS,我有一个具体的问题,但我有解决方案,它太丑了,我无法忍受,但无法从中得到任何更好的东西,有太多代码需要粘贴,但我会尽力描述我的问题:
当我尝试激活我的虚拟环境时收到此错误即源 ~/edu-venv/bin/activate -bash: /home/vagrant/edu-venv/bin/activate: No such fil
要创建触发器,似乎必须发布它才能生效。但是发布需要对“协作”分支进行 PR,这意味着我们甚至在测试触发器是否实际工作之前就必须创建一个 PR,并且还必须创建多个后续 PR,直到我们获得正确的触发器。
我是最近的 IntelliJ Idea 用户,我不知道如何启用 Hibernate。当我右键单击我的项目时,Hibernate 不会出现在“添加框架支持”菜单中(实际上我唯一可以选择的技术是 Groo
要创建触发器,似乎必须发布它才能生效。但是发布需要对“协作”分支进行 PR,这意味着我们甚至在测试触发器是否实际工作之前就必须创建一个 PR,并且还必须创建多个后续 PR,直到我们获得正确的触发器。
我是一名优秀的程序员,十分优秀!