Unity3D不安全的代码需要指定“unsafe”命令行选项

7

我正在使用 Unity3D 4.3 并调用我创建的一个 DLL。 当尝试调用它唯一的函数时,代码如下:

void GetModelReferences(int &nVertices, float * vertices, int &nTriangles, int * triangles, float * normals, float * uvCoordinates);

Unity 给我报错:

Unsafe code requires the `unsafe' command line option to be specified

在我的MonoDevelop中,我打开了:Project->Assembly-Csharp options,并启用了unsafe模式。

这可以减少一些错误,但是最后一个错误仍然存在。

Unsafe code requires the `unsafe' command line option to be specified

我该做什么?


你有多个项目吗?也许你需要在多个项目上检查该设置。 - Lasse V. Karlsen
6个回答

13

进入项目属性页面,在生成选项卡下勾选允许不安全代码复选框即可解决问题。


不安全的代码在附加到Unity对象的C#脚本中,那么怎么办? - orthehelper
Unity项目是C#项目吗?如果是,那么也有一个属性页面。如果不是,我就不知道Unity如何执行脚本了。 - CodeTherapist
好的,我知道我需要添加选项\标志(flag),但我不知道如何到达那里。 - orthehelper
4
在MonoDevelop中:菜单选择 项目/Assembly-CSharp选项,然后进入Build/General/ 允许不安全代码。 - Cross_

8
以下是我在Unity3D 5.3中的解决方案:
- 如果在Unity构建设置->播放器设置->其他设置中,“API兼容性级别”为“.Net 2.0”,请在Unity资源文件夹下创建一个名为gmcs.rsp的文件,并将以下内容添加到该文件中:
-unsafe
关闭Unity并重新打开。
- 如果“API兼容性级别”为“.Net 2.0子集”,则上述文件名应为:smcs.rsp。
请查看下面的图片以找到Unity中“API兼容性级别”设置的位置:
enter image description here

3

这是对我唯一有用的答案。由于我无法使用.NET 2.0 Subset,而我的Unity项目设置没有允许不安全代码的选项。 - MrPaulch
1
当针对.NET 3.5等效(已弃用)脚本运行时版本时,使用mcs和mcs.rsp,而当针对.NET 4.x等效脚本运行时版本编译器时,则使用csc和csc.rsp。 - c0ffeeartc

0
如果您正在Unity项目中,请打开“项目设置>其他设置>允许不安全代码”。

0
您可以通过MonoDevelop更改设置: 转到解决方案文件树 -> 解决方案 -> 展开您的解决方案 -> Assempely-CSharp -> 右键单击 -> 选项 -> 构建 -> 常规 -> 语言选项 -> 启用“允许不安全的代码”


0

你试过this吗?

看一下第五条评论

首先显示Unity.App的内容,然后深入到Contents/Frameworks/MonoCompiler.framework。

打开名为compile_any.pl的文件,在“#运行csharp编译器”部分中将@Base_Args选项更改如下:

my @base_args=($mono_path, $mcs_path, '-debug', '-unsafe', '-target:library', '-nowarn:0169', '-out:'.$output, );


我正在从一台电脑上运行。 - orthehelper
Miloš Selečéni,这是哪个版本的Unity?我的有一个Frameworks文件夹,但没有MonoCompiler.framework。 - cowlinator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接