我对 Azure 和 WebServices 非常陌生,所以请耐心等待。基本上,我有一个 WebService 引用 3 个不同的 dll SOCreate.dll、EOTCBase.dll、EOTC_InBuffer.dll,不是标准的 .NET dll,而是而是来 self 其他项目的 dll。在 Azure 上成功发布 WebService 后,我正在调用 WebService,它调用 EOTCBase.dll 中的方法。 EOTCBase.dll 中的方法尝试加载 EOTC_InBuffer.dll 程序集,如下所示:
程序集 dbAssembly = Assembly.LoadFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\EOTC_InBuffer.dll");
但是该调用失败并出现错误系统找不到指定的文件。 (HRESULT 异常:0x80070002)
当我检查 Azure 上有哪些文件时,我可以看到我的 WebService 和 bin 文件夹:
然后我进入 bin 文件夹,可以看到其中的所有 3 个 dll:
我猜这意味着所有 3 个 dll 都发布在 Azure 上并且可以在 bin 文件夹中使用。我尝试用谷歌搜索类似的内容,但找不到类似的场景。有人可以指出这里有什么问题或者引用一些阅读 Material 的链接吗?谢谢。
附注根据 Azure 控制台输出,这几乎看起来所有这 3 个 dll 都位于同一个 bin 文件夹中,但实际上其中一些实际上并不在那里。
最佳答案
更新
我的意思是在门户上打开 kudu
,然后手动添加 mydll
文件夹,如我的屏幕截图所示。 .dll文件的具体路径为D:\home\site\wwwroot\mydll\a.dll
。这样,如果操作成功,就不用担心临时文件夹的问题了。将所有将使用的 .dll 文件复制到 mydll
文件夹中。
隐私
您可以使用动态加载功能来使用您的.dll 文件。如果本地成功,部署后不成功,那么问题应该出在Azure云环境上。
#region Dynamically load .dll
object obj=null;
byte[] filesByte;
Assembly assembly;
Type type;
MethodInfo timerInitial;
MethodInfo timerDispose;
#endregion
private void LoadDll()
{
try
{
filesByte = File.ReadAllBytes(Path.GetDirectoryName(Application.ExecutablePath) + "//EOTC_InBuffer.dll");
assembly = Assembly.Load(filesByte);
type = assembly.GetType("EOTC_InBuffer.dll");
obj = System.Activator.CreateInstance(type);
timerStart = tp.GetMethod("TimerStart");
timerStop = tp.GetMethod("TimerStop");
if (timerStart != null)
{
timerStart.Invoke(obj, null);
}
}
catch(Exception)
{
}
}
您在本地运行成功,但部署到 Azure 将失败。这个问题无法处理,因为我们无法在Azure环境中注册.dll,也无法通过代码读取并加载bin文件夹中的这些.dll文件。
这个问题我已经在another post中回复过之前也尝试过用代码来处理这个问题但是都失败了,希望对你有帮助。
关于c# - Azure WebService 找不到我的程序集之一,但它基于 Azure 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61785187/