嗨,我在徘徊,我怎么能实现这个过程: 我希望将项目编译几次到几个dll,并通过在其他项目中使用它们来获得不同的结果。 它背后的想法是调试反射应用程序。 这是我的代码:
public class MokingDataSouce : IDataSource
{
public MokingDataSouce()
{
Random random = new Random();
this.MokingId = random.Next(1, 11);
}
public string Name
{
get { return "Moking Data Source " + this.MokingId; }
}
public int MokingId { get; set; }
public IDocumentDetails DocumentDetails
{
set { }
}
}
我几次编译这段代码并重命名dll,希望得到不同的结果。 当我运行一个加载dll并启动MokingDataSource的程序时,我得到所有的MokingId。
P.S我尝试将随机设置为静态成员,但我得到了相同的结果。
我认为它与所有存在于同一运行时CLI中的事实有关。但我找不到克服它的方法。
由于
答案 0 :(得分:2)
随机是确定性的。它是一种为早期给定值(“种子”)生成数字的算法。
您可以使用种子值初始化Random以获得相同的结果:
var rand = new Random(13);
如果未指定种子值,则使用基于时间的种子值。
你可能会在一个接一个地调用相同的方法,这就是为什么他们使用相同的基于时间的种子值,导致相同的随机值。
如果要使用某个特定编译版本的程序集所特有的值,请查看程序集的moduleversionid,该值是为每个编译唯一生成的:
Assembly.GetExecutingAssembly().ManifestModule.ModuleVersionId
你可以这样做:
var rand = new Random(
Assembly.GetExecutingAssembly().ManifestModule.ModuleVersionId.GetHashCode()
);
让你的模块生成相同的随机数,但每次编译都会产生不同的随机数。