我在GitHub上有来自Microsoft的CNTK的CSEvalClientTest.csproj的代码。我已经创建了一个新的Visual Studio 2015 c#控制台应用程序,粘贴在CSEvalClientTest.csproj的代码中,修复了引用并让它运行。但它并没有走得太远。在这行源代码中: 使用(var model = new IEvaluateModelManagedF()) 它抛出了这个例外:
System.Runtime.InteropServices.SEHException was unhandled
非常感谢任何解决此问题的帮助!
答案 0 :(得分:1)
您是否可以将CNTK Nuget Package用于C#应用程序?这将消除关于dll引用的大多数麻烦。您可以查看https://github.com/Microsoft/CNTK/tree/master/Examples/Evaluation/CSEvalClient中的示例以获取更多信息。
答案 1 :(得分:0)
最有可能的是,您缺少一些引用的本机DLL。查看this related SO question以获取DLL列表。那些需要与主可执行文件驻留在同一目录中。
请注意,您必须为使用EvalWrapper
的所有DLL或EXE添加正确的引用集,这很麻烦。我发现使用您在项目文件中引用的props
文件很有帮助。以下是cntk_evalwrapper.props
的外观(您需要调整CNTK版本的位置)
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="c:/git/cntk/x64/Release_CpuOnly/EvalDll.dll">
<Link>evaldll.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="c:/git/cntk/x64/Release_CpuOnly/EvalDll.lib">
<Link>EvalDll.lib</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="c:/git/cntk/x64/Release_CpuOnly/Math.dll">
<Link>Math.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="c:/git/cntk/x64/Release_CpuOnly/libiomp5md.dll">
<Link>libiomp5md.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="c:/git/cntk/x64/Release_CpuOnly/mkl_cntk_p.dll">
<Link>mkl_cntk_p.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Reference Include="EvalWrapper">
<HintPath>c:/git/cntk/x64/Release_CpuOnly/EvalWrapper.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
在项目文件yourproject.csproj
中,包含此道具文件,以便项目文件的顶部如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\cntk_evalwrapper.props" />
再次,调整相对路径,使其正确指向项目文件到props文件。如果方法正常,则在重新加载项目后,您应该在项目的引用中看到对EvalWrapper
的引用。