前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 .NET 项目中开启不安全代码(以便启用 unsafe fixed 等关键字)

如何在 .NET 项目中开启不安全代码(以便启用 unsafe fixed 等关键字)

作者头像
walterlv
发布2023-10-22 10:59:22
3640
发布2023-10-22 10:59:22
举报
文章被收录于专栏:walterlv - 吕毅的博客

有小伙伴希望在 .NET 代码中使用指针,操作非托管资源,于是可能使用到 unsafe fixed 关键字。但使用此关键字的前提是需要在项目中开启不安全代码。

本文介绍如何在项目中开启不安全代码。


入门方法

第一步:在你需要启用不安全代码的项目上点击右键,然后选择属性:

第二步:在“生成”标签下,勾选上“允许不安全代码”:

第三步:切换到 Release 配置,再勾上一次“允许不安全代码”(确保 Debug 和 Release 都打开)

方法结束。

如果你一开始选择了“所有配置”,那么就不需要分别在 Debug 和 Release 下打开了,一次打开即可。

高级方法

推荐

如果你使用 .NET Core / .NET Standard 项目,那么你可以修改项目文件来实现,这样项目文件会更加清真。

第一步:在你需要启用不安全代码的项目上点击右键,然后选择编辑项目文件:

第二步:在你的项目文件的属性组中添加一行 <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

我已经把需要新增的行高亮出来了

1 2 3 4 5 6 7 8 9

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ++ <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> </Project>

临时方法

不推荐

如果你只是临时希望加上不安全代码开关,则可以在编译的时候加入 -unsafe 命令行参数:

1

csc -unsafe walterlv.cs

注意,不能给 msbuild 或者 dotnet build 加上 -unsafe 参数来编译项目,只能使用 csc 加上 -unsafe 来编译文件。因此使用场景非常受限,不推荐使用。

其他说明

第一种方法(入门方法)和第二种方法(高级方法)最终的修改是有一些区别的。入门方法会使得项目文件中有针对于 Debug 和 Release 的不同配置,代码会显得冗余;而高级方法中只增加了一行,对任何配置均生效。

因此如果可能,尽量使用高级方法呗。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ++ <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> -- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> -- <AllowUnsafeBlocks>true</AllowUnsafeBlocks> -- </PropertyGroup> -- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> -- <AllowUnsafeBlocks>true</AllowUnsafeBlocks> -- </PropertyGroup> </Project>

即使是 .NET Framework 也是可以使用 SDK 风格的项目文件的,详情请阅读:

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/allow-unsafe-code-in-dotnet-project.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected])

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 入门方法
  • 高级方法
  • 临时方法
  • 其他说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档