Hal Heinrich Hal Heinrich - 21 days ago 5
C# Question

Warning when adding reference to EvalWrapper.dll

I'm trying to train and use CNTK from within a Visual Studio 2015 C# project.
Seems like I need to add:
using Microsoft.MSR.CNTK.Extensibility.Managed;

And to get that working I apparently need to add a reference to EvalWrapper.DLL.

There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "EvalWrapper", "AMD64". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.

My system is an x64-based processor.

Do I ignore this warning and carry on? If not how do I fix this?
Any help with this or links to examples of what I'm attempting are appreciated.

Answer

EvalWrapper.dll is unmanaged (native) code, which then can only be executed on the processor architecture it is written for - in this case x64. C# is compiled into MSIL, which can run on different platforms (through a platform-dependent runtime environment). What this warning means is roughly "hey, if you take that C# executable and run it on some, say, 32bit system, you will not be able to take along that x64 EvalWrapper."

You should be able to get rid of this warning by selecting "Properties" in the context menu of your project file, and changing the Platform to amd64. Alternatively, you should be good to ignore that warning.

For examples, open the CNTK solution, look at the C# project CSEvalClientTest.csproj in Tests/EndToEndTests/EvalClientTests/