你好,我是徘徊如何实现以下:我希望将一个项目多次编译为几个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的事实有关。但是我找不到克服它的方法。
谢谢
随机是确定性的。它是一种为先前给定的值("种子")生成一个数字的算法。
你可以用一个种子值初始化Random来得到相同的结果:
var rand = new Random(13);
如果不指定种子值,则使用基于时间的种子值。
你可能一个接一个地调用相同的方法,这就是为什么它们使用相同的基于时间的种子值,导致相同的随机值。
如果您想使用某个特定编译版本的程序集的唯一值,请查看程序集的moduleversionid,该值是为每次编译唯一生成的:
Assembly.GetExecutingAssembly().ManifestModule.ModuleVersionId
你可以这样做:
var rand = new Random(
Assembly.GetExecutingAssembly().ManifestModule.ModuleVersionId.GetHashCode()
);