Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在编译时生成并保存一个随机字符串_C#_Visual Studio - Fatal编程技术网

C# 在编译时生成并保存一个随机字符串

C# 在编译时生成并保存一个随机字符串,c#,visual-studio,C#,Visual Studio,我想在编译时向程序代码或资源中插入一个随机字符串,并将该值保存在外部以供以后参考 详情如下: 我有一个想法,如果你能在编译时随机生成一个字符串,并将其插入程序和存储文件中,那么如果你要在两台计算机之间复制一个单独的版本,它将共享同一个字符串,那么就有可能识别程序的各个版本,但是如果您再次编译它,新版本将具有不同的字符串 这只是我的一个想法,我找不到c的任何东西,只是c/c++特有的东西,比如模板,虽然我可以看到这在你有一个由一群员工使用的程序的情况下是有用的,并且可以给每个人一个单独的构建,所以

我想在编译时向程序代码或资源中插入一个随机字符串,并将该值保存在外部以供以后参考

详情如下:

我有一个想法,如果你能在编译时随机生成一个字符串,并将其插入程序和存储文件中,那么如果你要在两台计算机之间复制一个单独的版本,它将共享同一个字符串,那么就有可能识别程序的各个版本,但是如果您再次编译它,新版本将具有不同的字符串


这只是我的一个想法,我找不到c的任何东西,只是c/c++特有的东西,比如模板,虽然我可以看到这在你有一个由一群员工使用的程序的情况下是有用的,并且可以给每个人一个单独的构建,所以如果有泄漏,可以更容易地跟踪。

据我所见,你的问题可以分为两部分

在代码中存储和检索随机字符串 在构建时生成随机字符串 在代码中存储和检索随机字符串

这是最简单的部分。因为每次都会自动生成,所以需要将其存储在代码之外。您可以将其存储在远程服务器上的数据库表、文件、windows注册表中—这取决于您。这样,代码只需要一个函数就可以从保存它的位置检索它

在构建时生成随机字符串

根据问题中的标记,我假设您正在使用visual studio。在这里,您可以使用MSBuild的强大功能。您需要编辑CSPROJ文件,在生成过程中添加生成随机字符串的操作,并将生成的字符串推送到上面选择的存储位置,即MSBuild目标内部

您感兴趣的MSBuild目标是以下两个目标之一:

<Target Name="BeforeBuild"><!--Runs before build begins-->
</Target>

你可以在这些目标范围内运行任何东西。有关使用C的helloworld示例,请查看Microsoft文档网站上的以下链接


侧注:我推荐微软内置引擎中的这本书——使用MSBug和Sayed Ibrahim Hashimi和William Bartholomew的Team Foundation构建。 我假设您使用的是git,那么添加您正在构建的提交的sha如何?另外,请注意您试图解决的问题。如果你想防止一个不诚实的员工泄露你的软件,你可能会考虑其他的措施,或者你认为雇员愚蠢到不知道你的隐藏价值吗?是什么阻止该员工抓取其他用户的副本并泄露该副本?我希望它能够在每次通过visual studio发布程序时生成一个新字符串,并且能够在任何地方使用该字符串,即string rando=random,员工案例就是一个例子,我刚才在想,你如何能够唯一地识别一个构建,员工用例就是一个例子。创建一个powershell脚本或类似的东西,然后从构建期间可以调用的脚本中调用它,检查项目设置,还有一些预构建脚本可以设置。

<Target Name="AfterBuild"><!--Runs after build completes-->
</Target>