[Mono-dev] Class built by mono throws FileNotFoundException when run on windows
Greg Young
gregoryyoung1 at gmail.com
Wed Sep 2 09:04:05 UTC 2015
Use conditional compilation.
On Tuesday, September 1, 2015, Edward Ned Harvey (mono) <
edward.harvey.mono at clevertrove.com> wrote:
> I've always used separate project files on windows and linux, in order to
> include different compiler symbols, in order to make projects build with
> different dependencies. I've been chastised here for doing it, so I'd like
> to find a better way. (Miguel and others tore apart a pull request, saying
> I should never check __MONO__, if I need behavior to be different on
> windows and non-windows, I need to use a runtime check. The problem is, as
> described below, the runtime check can't build or run on windows, so I'd
> like to figure out how it should be done).
>
> Right now, I have a class, which is using Mono.Unix.Native, because of a
> method that does this:
> if (Type.GetType("Mono.Runtime") != null) {
> Syscall.chmod(...);
> }
>
> When built and run on mono, works great. The problem is building and
> running on windows. In order to make it build, I copied Mono.Posix.dll into
> the project and referenced it, with CopyLocal = False. This way,
> Mono.Posix.dll doesn't get copied to the build directory, which is good
> because it's already present on mono systems, and not needed on windows
> systems - the only reason for it to exist in the project is because windows
> can't build without it.
>
> So it builds. But unfortunately, it won't run on windows. It throws
> FileNotFoundException "Mono.Posix.dll" before evaluating the if-clause.
>
> The workaround I've found is to create a wrapper class MonoSpecific, so
> the if-clause and the Mono.Posix call are not in the same file. But this is
> clearly a hack. Is there a better way?
>
> Hello.cs:
> using System;
> namespace helloProject
> {
> static class Hello
> {
> static void ChangePermsIfNecessary()
> {
> if (Type.GetType("Mono.Runtime") != null) {
> MonoSpecific.DoChmod();
> }
> }
> }
> }
>
> MonoSpecific.cs:
> using System;
> using Mono.Unix.Native;
> namespace helloProject
> {
> static class MonoSpecific
> {
> static void DoChmod()
> {
> Syscall.chmod(...);
> }
> }
> }
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20150902/3366c508/attachment-0001.html>
More information about the Mono-devel-list
mailing list