从同一项目编译多个 DLL 并获得不同的结果



你好,我是徘徊如何实现以下:我希望将一个项目多次编译为几个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()
    );
让你的模块生成相同的随机数,但每次编译时都是不同的。

相关内容

  • 没有找到相关文章

最新更新