0

我需要在我的 linux vps 上运行一小段代码(如下)来生成基于特定 ID 号的字符串。我对 PHP 不是很有经验,但我尝试过 PHP 中的编码算法,但我总是得到与 c# 代码不同的结果——很可能是由于 Randomize 或 Rnd 函数的运行方式。

对于这么小的东西,单声道是一个有效的解决方案吗?实施中涉及什么。任何信息都是有用的,我可以做更多的研究,但我只需要验证我没有浪费时间试图让它在 Linux 上运行。有人有使用 Mono 处理小脚本的经验吗?

编辑我对任何有这么小的单声道实现经验的人都非常感兴趣。

c# 的代码如下。在此运行之前,我将调用我的数据库以检索存储在 unqiueid 字符串变量中的数字。在此代码段运行后,我将拥有将 unlockcode 变量写入数据库的代码。

var rnum = Microsoft.VisualBasic.VBMath.Rnd(-1);
var seed = 2 * uniqueid.AsInt();
Microsoft.VisualBasic.VBMath.Randomize(seed);
for (int i = 1; i <= 6; i++)
{
   unlockcode = unlockcode + Convert.ToChar((int)((26) * Microsoft.VisualBasic.VBMath.Rnd() + 1 + 64));
}
4

1 回答 1

0

我对你的问题有点疑惑。
应用程序的有限大小不是“不”使用 Mono 的理由。

但是,当您以 Linux 为目标时,您应该避免使用特定于 Windows 的东西。
例如,您不能在 Linux 上运行 WPF 应用程序。

理论上,您可以只编译代码并在 Linux 上使用 Mono 运行它,
但您使用的是 Microsoft.VisualBasic 中的类。我没有检查它是否在 Mono 上可用,但即使是,也没有必要使用它:

var unlockCode = 0;
var random = new Random(Convert.ToInt32(uniqueId));
var randomNumber = random.Next();
for (int i = 1; i < 6; i++)
{
    unlockCode += Convert.ToChar((int)((26) * random.Next() + 1 + 64));
}

使用 System.Random 而不是 Microsoft.VisualBasic.VBMath.Randomize,这样就少了一个需要担心的依赖项。

我还应该注意,当您在 Windows 上使用例如 Visual Studio 进行
编译时,无需重新编译即可在 Linux 上使用它,只需复制已编译的程序集 (exe) 并将其部署到 Linux 上并执行它与单声道。

反之亦然,如果您在 Linux 上使用 mono csharp 编译器编译应用程序,您可以简单地将其复制到您的 Windows 机器并使用 .NET(或 Mono)执行它

如果您在 Windows 上编译了一个应用程序并想知道它是否使用了 Linux/Mono 上不可用的任何东西,请使用 MoMa 工具:http ://www.mono-project.com/MoMA

它会告诉你如果在 Linux/Mono 上运行应用程序会遇到什么问题。

更新:关于您的评论

运行 Mono 只是为了运行 7 行遗留 c# 代码似乎有点傻

它没有什么可笑的……当然它会占用一些磁盘空间,但它不是一个在后台连续运行的进程或其他任何东西。Mono 运行时在您执行应用程序时使用,并在没有其他 Mono/.NET 应用程序处于活动状态时停止。Python 应用程序甚至命令行 PHP 应用程序也是如此。在您的系统上安装 Mono 并没有什么坏处,我不会担心。

于 2013-02-22T12:49:53.103 回答