c#相同的代码适用于应用程序但不适用于.dll

时间:2015-10-14 19:03:32

标签: c# dll

我真的很困惑我写了一些从数据库中读取一些记录的代码。如果我将它编译为一个应用程序它工作正常。如果我将它编译为.dll并且我从另一个应用程序调用.dll,则代码不再起作用(它返回全零)。 此代码在Form_onShown()

中调用
Portfolios.Add(new NPortfolio(1, "1", activeContracts));
Dictionary<string, double> p = db.GetPortfolio(1,Today);
Portfolios[0].UpdatePositions(p);

var strContracts = new List<string>();                     
strContracts.Add(pf.p_id);
strContracts.AddRange(pf.getPositions().Select(o => o.Value.ToString()).ToList());

这会在编译为.exe时返回我存储的数据库值,并在编译为.dll !!时返回全部0

NPortfolio类的定义如下:

    public NPortfolio(int nr, string id, List<string> ac)
    {
        p_nr = nr;
        p_id = id;
        positions = new Dictionary<string, double>();
        foreach (string ticker in ac)
        {
            positions.Add(ticker, 0.00);
        }
    }

    public void UpdatePositions(Dictionary<string, double> position)
    {
        foreach (var k in this.getPositions().Keys.ToList())
        {
            if (position.ContainsKey(k))
            {
                this.positions[k] = position[k];
            }
        }
    }

    public Dictionary<string, double> getPositions()
    {
        return positions;
    }
}

有什么建议吗?

R上。

1 个答案:

答案 0 :(得分:0)

此代码应在.dll和.exe中运行相同。

最有可能的是,由于您的2个环境设置不同,这就是您的问题,而且很可能是数据库提供输入或您存储的连接数据。 (您未显示的代码。)

您是如何确定您发布的代码确实失败了?

您可以尝试:

  • 在发生故障的机器上执行.exe
  • 将.exe转换为可以调试的机器(你可以启动dll - 如果这样做,它会询问你想要启动调试的.exe,或者你可以在项目属性中设置它)
  • 为可能失败并在故障机器上执行的每个步骤插入日志记录。从数据库连接开始,接收的记录数,等等。除非您在早期发现问题,否则这将变得相当繁琐。