XSockets在GetExport上抛出InvalidOperationException <ixsocketservercontainer> </ixsocketservercontainer>

时间:2014-06-16 08:34:38

标签: c# xsockets.net

我遇到了一个奇怪的问题。我有完全相同的代码。在一台机器上,它完美无缺。另一方面,它在 GetExport&lt; IXSocketServerContainer&gt;

上抛出 InvalidOperationException

违规行是:

  _serverContainer = Composable.GetExport<IXSocketServerContainer>();

以下是该例外的屏幕截图:screenshot

有什么想法吗?

我能想到的唯一区别是一台机器是Win 8,另一台机器是Win 7.


进一步的细节:采取有效的解决方案(win 8),按原样复制到其他机器(win 7),清理所有软件包,重新安装所有nuget依赖项,遍历所有项目添加或重新导入依赖项,现在仍在工作(在win 7机器上),虽然该项目将构建没有错误。

将非工作(但正在编译)项目带回第一台机器,它也无法在该机器上运行。完全没有想法。

2 个答案:

答案 0 :(得分:3)

好的,似乎这是不合时宜的......

它与 XSockets 没有任何关系。

VS中的(已知?)难度(读取:bug)会发生什么。

项目A( .exe )包括项目B( .dll )。 项目B具有将被复制到其输出目录的依赖项。 项目A不会获得项目B需要的依赖项,并且会在运行时刻录并崩溃。


<强>解决方案:
为项目(项目属性 - &gt;构建事件)创建一个类似于

的Post构建事件
copy /y source target

您可能希望在源和目标周围加上双引号,以避免在包含空格时出现失败 您希望 / y 覆盖目标中的文件 您可能需要播放一下才能获得正确的语法:

copy /y "$(ProjectDir)..\project_b\$(OutDir)some_mask.dll" "$(ProjectDir)$(OutDir)"

相关链接:

Visual Studio Post Build Event - Copy to Relative Directory Location

Copy file(s) from one project to another using post build event...VS2010

Copy bin files on to Physical file location on Post Build event in VS2010

VS BUG: 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 ...服务器也将抛出上述异常

答案 1 :(得分:0)

原因是我们使用以下方法来定位程序集。

public static string GetAssemblyDirectory()
{
    return HostingEnvironment.IsHosted
                        ? HttpRuntime.BinDirectory
                        : Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
}

所以,因为我们使用:

new Uri(...)

“#”将被删除,路径将找不到程序集,然后您将获得“序列不包含匹配元素...”异常。

但是,如果在使用插件框架之前手动添加路径,它应该可以工作......类似于。

Composable.AddLocation(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));

你可以添加任何位置,这个“示例”会将所有程序集/ exe加载到执行程序集/ exe的bin文件夹中 在4.0中,我们将使用上述方法并跳过“新的Uri(..)”。

如果您有任何问题,请告诉我。