If you're thinking about developing a contract for NEO, you might find that setting up the development environment is a bit "raw" at the moment. If you're not a regular Windows user, you may catch yourself stuck early on in the build process.
This article is meant to supplement the C# guide for Windows on the Neo.org website, specifically for issues I ran into on Windows 7.
If you plan to develop NEO Smart Contracts using Linux or Mac OS X, you'll need to use the Python tools at the moment. (Thanks to @qed for pointing this out.) While Visual Studio is available for Mac and Linux, the NEO plugin only supports Windows right now.
You can use a VM for Windows, but if you have an old Windows desktop or laptop lying around, you can use Windows 7. The process to get NEO Contracts running on Windows 7 is a bit trickier than the guide lets on, but I hope my trial and error can clear the way for you. I've ordered the following points to follow the order that the issues came up while compiling Neon and the example project.
Errors with NuGet
Problem: When you try to publish the neon package, you might come across an error which tells you to run the NuGet Restore option. However, even if you try to restore using the Visual Studio UI, the same error comes up again, trapping you from resolving the issue.
Solution: You'll want to download the official NuGet executable from their website. Once you have that, copy the .exe into the root directory of the neo-compiler project. Then, open up the command prompt, change your directory to the same root neo-compiler directory, and then run
Errors with neon.dll
Problem: Following the above issue, you might still not be able to publish your project. In this case, an error comes up that "neon.dll" does not exist within
Solution: If you take a look at the parent directory,
obj/Release/netcoreapp1.0/, you should find the neon.dll library. Go ahead and copy the .dll into the child directory, and then try again to publish the project.
Download the api-ms-win-core-console-l2-1-0.dll DLL
Problem: After you add the neon directory to your Path environment variable, you may come across an error trying to run the neon program in the command prompt, which tells you that
api-ms-win-core-console-l2-1-0.dll is missing.
Solution: The NEO C# manual addresses this, but for good measure, you'll need to download the
api-ms-win-core-console-l2-1-0.dll library and place it into the C:\Windows\System32 directory. However, I found that I needed to use the 64-bit DLL in order to get the neon program to run successfully.
Also, downloading DLLs is very sketchy. I personally pulled mine from dll-files.com. If anyone runs into any problems with this, please share in the comments. It's generally a major security hazard to download and use DLLs.
Building NeoContract - Neo namespace not found
Problem: When trying to build NeoContract1 (your first Neo Contract to check that everything is plugged in correctly), you may run into a namespace issue where Neo is not found.
Solution: Just like the solution for NuGet before, we need to copy nuget.exe into the root directory of our project. Copy nuget.exe into the same folder as the NeoContract1 solution. Then, open the command prompt, change your working directory to the location of the NeoContract1 solution, and run
Building NeoContract - Build stops after "Start NeoContract converter" step
Problem: When you're trying to build the NeoContract1, you might find that the build fails despite no clear error. It prints the first two lines just like the example image in the C# guide, but then it stops and fails.
Solution: If you haven't restarted Visual Studio or Windows since you started the C# setup process (and, I suspect, since you added neon to your Path), you might need to either restart Visual Studio or Windows. For good measure, coming from a Mac and Linux background, I restarted Windows, which fixed the problem.
I hope this helps to guide you through any common pitfalls. If you have other pitfalls to share, comment them below. If you have better suggestions for solutions, let me know, and I'll update the above list.
Good luck, and happy coding!