XSockets在GetExport上抛出InvalidOperati
本文关键字:InvalidOperati IXSocketServerContainer GetExport XSockets | 更新日期: 2023-09-27 18:08:50
我遇到了一个奇怪的问题。我有完全一样的密码。在一台机器上,它可以完美地运行。另一方面,它在GetExport
错误行是:
_serverContainer = Composable.GetExport<IXSocketServerContainer>();
下面是异常的截图:
任何想法?
我能想到的唯一区别是一台机器是Win 8,另一台是Win 7。
进一步的细节:采用了有效的解决方案(win 8),将其复制到其他机器(win 7),清理所有软件包,重新安装所有nuget依赖项,检查所有添加或重新导入依赖项的项目,现在仍然可以工作(在win 7机器上),尽管项目将没有错误地构建。
把那个不能工作(还在编译)的项目放到第一台机器上,它也不能在那台机器上工作。完全没主意了
好吧,看来这是off the bat…
它与XSockets没有直接关系。
在VS.
中出现了一个(已知的?)困难(即bug)项目A (.exe)包含项目B (.dll)。项目B的依赖项将被复制到它的输出目录中。项目A将无法获得项目B所需要的依赖项,并且会在运行时崩溃。
解决方案:
为项目创建一个Post构建事件(项目属性->构建事件),看起来像
copy /y source target
你可能想用双引号括住你的源和目标,以避免失败,如果它们包含空格。
您希望/y覆盖目标中的文件。
为了获得正确的语法,您可能还需要玩一些:
copy /y "$(ProjectDir)..'project_b'$(OutDir)some_mask.dll" "$(ProjectDir)$(OutDir)"
相关链接:
Visual Studio Post Build事件-复制到相对目录位置
使用构建后事件将文件从一个项目复制到另一个项目…VS2010
在VS2010的Post Build事件中将bin文件复制到物理文件位置
VS错误:https://connect.microsoft.com/VisualStudio/feedback/details/694561/copy-local-private-true-private-on-a-project-reference-needs-to-also-copy-what-the-target-project-marks-as-copy-local
附录:
似乎除了上面的,如果你从一个文件夹运行XSockets有#
(尖锐的,或哈希字符)在它的路径…服务器也会抛出上述异常
这样做的原因是我们使用以下方法来定位程序集。
public static string GetAssemblyDirectory()
{
return HostingEnvironment.IsHosted
? HttpRuntime.BinDirectory
: Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
}
所以,既然我们使用了:
new Uri(...)
"#"将被删除,路径将找不到程序集,然后您将得到"Sequence contains no matching elements…"异常。
但是,如果你在使用插件框架之前手动添加路径,它应该可以工作…类似。
Composable.AddLocation(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
你当然可以添加任何位置,这个"示例"将加载执行程序集/exe的bin文件夹中的所有程序集/exe在4.0中,我们将使用上面描述的方式,并跳过"new Uri(..)"的内容。