让我们分成两个问题:如何设置环境变量以及如何将本机框架绑定到MonoMac应用程序中。
设置环境变量
你可以在你的应用程序的Info.plist
的LSEnvironment
部分设置环境变量,像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.TableViewTest</string>
<key>CFBundleName</key>
<string>TableViewTest2</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>10.6</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>LSEnvironment</key>
<dict>
<key>Foo</key>
<string>Bar</string>
</dict>
</dict>
</plist>
好像有一次手动编辑该文件并添加至少有一个环境变量。
该文件由MonoDevelop自动创建,因此您只需添加LSEnvironment
部分即可。
之后,您可以在MonoDevelop中编辑它们:转到项目选项“Mac OS X应用程序”,“高级”。
捆绑本地框架中的MonoMac应用
您不需要设置任何环境变量捆绑在的MonoMac应用原生框架,有一个更容易和更清洁的方式做到这一点,这是也类似于目标C中的工作方式。
我创建了一个小型test applications,它在本机Objective C应用程序和MonoMac之中捆绑了一个框架。
您需要做的第一件事就是将您的框架与应用程序捆绑在一起。目前在MonoDevelop中无法自动完成此操作,因此您需要手动复制文件或使用一些后生成脚本(参见我的示例中的copy-framework.sh
)。
我建议将框架放入YourApp.app/Contents/Frameworks/YourFramework.framework
,因为这就是XCode处理它的方式;另请参阅Apple's Documentation。
要引用您的应用程序包内的图书馆,你可以用`@executable_path”(见dyld man page)。
我会建议使用<dllmap>
创建一个app.config文件,因此您不需要在代码中放入任何路径名,这样可以更容易地更改框架版本。例如:
<configuration>
<dllmap dll="TestFramework" target="@executable_path/../Frameworks/TestFramework.framework/TestFramework" />
</configuration>
如果你的框架内的实际库lib
开头或以.so
/.dylib
结束,那么你必须指定名称(以上dllmap不会文件TestFramework.framework/libTestFramework.dylib
,例如)。这是Mono中的一个错误,我刚刚解决了这个错误。
你是说'System.Environment.SetEnvironmentVariable'在Mono中不起作用吗? –