c#控制台应用程序引用的DLL变量保持为空
我读过很多关于这种情况的帖子,但我不知道解决办法或者我做错了什么 我有一个引用DLL的代码。它作为引用添加到Visual Studio中,并与目标exe文件一起在本地复制。它为我运行,但当我将其部署到另一台计算机时,它会在下面的代码行中导致NullReference异常(请参阅注释): 未处理的异常:System.NullReferenceException:对象引用 未设置为对象的实例 在Program.cs中的CheckUpdate.Program.CheckUpdate()处:第28行 在Program.cs中的CheckUpdate.Program.Main(字符串[]args)处:第22行 这是我的代码,请参阅堆栈跟踪中报告错误的注释:c#控制台应用程序引用的DLL变量保持为空,c#,web-services,dll,C#,Web Services,Dll,我读过很多关于这种情况的帖子,但我不知道解决办法或者我做错了什么 我有一个引用DLL的代码。它作为引用添加到Visual Studio中,并与目标exe文件一起在本地复制。它为我运行,但当我将其部署到另一台计算机时,它会在下面的代码行中导致NullReference异常(请参阅注释): 未处理的异常:System.NullReferenceException:对象引用 未设置为对象的实例 在Program.cs中的CheckUpdate.Program.CheckUpdate()处:第28行 在
using System;
using System.Collections.Generic;
using System.Text;
using Com.Idiominc.Webservices.Client;
using System.Diagnostics;
using System.IO;
using System.Net;
namespace CheckUpdate
{
class Program
{
private static WSContext _UpdateWScontext { get; set; }
private static string wsUrl = "https://www.myWorldServer.com/ws";
private static string[] myArgs;
static int Main(string[] args)
{
myArgs=args;
if (myArgs.GetUpperBound(0) != 1) return 9;
return checkUpdate();
}
public static int checkUpdate()
{
string testStr = "password1";
while (_UpdateWScontext == null && testStr != "")
{
try
{
_UpdateWScontext = new WSContext("user", testStr, wsUrl + "/services");
}
catch
{
if (_UpdateWScontext == null)
{
if (testStr == "password1") testStr = "password2";
else if (testStr == "password2") testStr = "password3";
else testStr = "";
}
}
}
if (_UpdateWScontext.token == string.Empty) return 0;
string currentversion = myArgs[0];
string latestver = getLatestVersion();
if (latestver == null)
{
return 0;
}
else if (!currentversion.Equals(latestver))
{
if (getLatestDownload()) return 1;
else return 0;
}
else
{
_UpdateWScontext.logout(_UpdateWScontext.token);
return 2;
}
}
}
}
DLL(WSWebServices.DLL)与可执行文件一起在本地复制。它在我自己的工作站上运行,但当我将其移植到另一个工作站时,它会导致异常
任何建议或线索将不胜感激,谢谢
编辑:
根据注释,NullReference异常处于在线状态
if (_UpdateWScontext.token == string.Empty) return 0;
我现在已将其修改为
if (_UpdateWScontext == null || _UpdateWScontext.token == string.Empty) return 0;
但是,如果没有更多的NullReference异常,现在的退出代码总是0
,这意味着变量仍然是null
有没有关于为什么与URL的连接不起作用的建议?它确实在同一台计算机上的浏览器中工作
更新-已解决
我通过将异常堆栈跟踪输出到应用程序不工作的工作站上的控制台来跟踪错误,结果发现WSWebServices.dll
引用了Microsoft.Web.Services2.dll
(WSE包的一部分)由于某种原因,这在行为不端的空间站上的安装中丢失了
我添加了它作为参考,并确保dll被复制到应用程序文件夹,现在它可以按预期工作。这里为其他同样神秘的人记录了WorldServer web服务无法工作的原因。在while循环中,首先尝试使用
Password1
,在创建WSContext
时会出现异常,然后在catch块中将testStr
设置为Password2
。使用Password2
您再次得到一个异常,这次在catch块中,您将testStr设置为空字符串,并且在不创建\u UpdateWScontext
的情况下退出while循环
我认为如果(_UpdateWScontext.token==string.Empty)返回0,那么在代码的这一点上,您应该正好使用null refexception代码>
您应该在while循环内的catch块中记录异常详细信息,它可以提供有关错误的线索。您提供了该DLL的引用吗?程序语句while(\u UpdateWScontext==null&&testStr!=“”)
可能会抛出NullReferenceException
。该语句中没有解引用表达式。坦率地说,您的问题似乎最适合作为问题的复制品,但也缺乏可靠重现问题的好方法。如果希望从堆栈溢出社区获得有用的帮助,则需要显著改进该问题。可能在while循环中,首先尝试使用Password1,在创建WSContext时出现异常,然后在catch块中将testStr设置为Password2。使用Password2,您再次得到异常,这次在catch块中,您将testStr设置为空字符串,并在不创建_UpdateWScontext的情况下退出while循环。我认为,如果(_UpdateWScontext.token==string.Empty)返回0,那么在代码的这一点上,您就可以看到null ref异常代码>。您应该在while循环的catch块中记录异常详细信息,它可以提供有关错误的线索。@PeterDuniho堆栈跟踪将代码的第28行标识为异常的位置。我原以为问题是\u UpdateWScontext
,但现在我不知道。第28行可能是也可能不是您的注释所指的那一行,假设是,它可能是也可能不是异常实际发生的地方。特别是,如果您正在运行一个优化的(“发布”)构建,那么执行的代码通常不再与原始C#中的逐行匹配,并且异常中报告的行可能已关闭。不管怎样,这里没有什么可以让我们继续下去的。你需要遵循我前面提到的Q&A中的建议,或者改进帖子,使其包含一个好的。谢谢你的建议,我做到了,并且能够将错误跟踪到站点上另一个缺失的dll。怪胎请看我原来帖子的更新,如果你不介意的话,请对这个问题进行更新投票,因为我认为它很有价值,不想删除它(我通常不想保留负面投票的问题),谢谢。