[英]Asp.net calling C# layer calling Managed C++ calling Native C++
我的項目結構如下:
ASP.NET calling C# layer calling Managed C++ calling Native C++ (i'm trying to avoid using interop so this is why the managed c++ layer) I wrote unit test that test the C# layer and it works fine. 當我嘗試運行 asp.net 頁面時,我得到: "Could not load file or assembly..."
錯誤。 我發現當我將本機 C++ dll 復制粘貼到“臨時 ASP.NET 文件”(到相應的文件夾)時,該站點有效。
似乎托管 C++代碼只有在位於同一文件夾中時才能找到本機 C++代碼 - 顯然我不能在臨時文件中包含我的本機 dll。
有沒有辦法將 Native 設置在全局位置(不適用於 System32)?
謝謝你的評論。
我用代碼自行設置了服務器,它在 cassini 下運行,但是當我發布它(在 iis7 下運行)時,我得到“無法加載文件或程序集......”我正在運行 IIS7 ApplicationPoolIdentity,.net 4 集成 非常感謝,Pini。
從技術上講,以這種方式使用托管 C++ 是本機/托管代碼之間的一種互操作形式,常用的替代方案是 COM 和 P/Invoke。 這純粹是一個術語,但是,使用 P/Invoke 會遇到同樣的問題。
這篇博客文章在 ASP.Net 中加載 C++ 程序集可能會對您有所幫助 - 簡而言之,您需要:
%PATH%
環境變量。DllImport
屬性設置 dll 路徑(不適用於您的情況,因為您沒有使用 P/Invoke)LoadLibrary
) before the Managed C++ assembly attempts to load your native C++ dll.我懷疑將您的 dll 安裝到 Win SxS 也可以,但我不太了解它是如何工作的。
你可以設置你的路徑變量嗎?
您可以通過轉到“我的電腦”/“計算機(Windows-PauseBreak)的屬性,然后單擊高級設置。單擊高級。環境變量。根據需要修改系統變量下的“路徑”。
我不得不在 ApplicationPoolIdentity 中翻轉一個布爾值。 屬性中的一個文件說“啟用 32 位”,這就是訣竅:) 默認為 False 我的服務器是 64 位,我用 32 位構建我的本機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.