c#同样的代码适用于应用程序,但不适用于.dll
我真的很困惑我已经写了一些从数据库中读取某些记录的代码。如果我将它编译为应用程序,它工作正常。如果我将它编译为.dll并从另一个应用程序调用.dll,则代码不再有效(它将返回全零)。 此代码是所谓的Form_onShown()c#同样的代码适用于应用程序,但不适用于.dll
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.
此代码应运行的.dll和.exe相同。
很有可能,因为你的2个环境设置不同,这是你的问题,并且在那里,最有可能是数据库提供输入或连接数据存储。 (您没有显示的代码。)
您是如何确定您发布的代码确实失败的?
你可以试试:
- 执行对有故障的机器
- 工作的.exe未能获得.exe文件到机器,你可以调试(你可以启动DLL - 如果你这样做,它会问你您想要启动哪个.exe进行调试,或者您可以将其设置为项目属性)
- 插入日志记录,可能会失败并在发生故障的计算机上执行的每个步骤。从数据库连接开始,接收多少条记录,依此类推。除非您在早期发现问题,否则这会变得非常乏味。
很平坦..我试图在失败的机器上运行.exe,我得到以下消息:“AppName已停止工作, - 在线检查... - 关闭程序, - 调试程序 – prre72
这并不说明很多..内部出了问题,可能是一些未处理的异常。你可以添加你自己的处理程序的未处理的异常http://stackoverflow.com/questions/3133199/net-global-exception-handler-in-console-application然后日志它/显示一个盒子/任何东西,它应该给你关于出错的信息(使用ex.ToString(),它包括Stacktrace和消息,这通常是非常有用的。) –
你是否运行了调试器并逐步完成了这些方法? –
我不知道如何调试.dll,调用的应用程序在没有IDE的其他机器上运行 – prre72
您可以创建一个新项目,引用该dll并粘贴到您要测试的代码中。然后用调试器运行它。这或多或少是你在这里问人的。 – Dietz