簡體   English   中英

Asp.net 調用 C# 層調用 托管 C++ 調用本機 ZF6F87C9FDCF8B3C3F07F93F1EE8712

[英]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)?

謝謝你的評論。

它歸結為一種選擇:

  1. 這是安全問題

我用代碼自行設置了服務器,它在 cassini 下運行,但是當我發布它(在 iis7 下運行)時,我得到“無法加載文件或程序集......”我正在運行 IIS7 ApplicationPoolIdentity,.net 4 集成 非常感謝,Pini。

從技術上講,以這種方式使用托管 C++ 是本機/托管代碼之間的一種互操作形式,常用的替代方案是 COM 和 P/Invoke。 這純粹是一個術語,但是,使用 P/Invoke 會遇到同樣的問題。

這篇博客文章在 ASP.Net 中加載 C++ 程序集可能會對您有所幫助 - 簡而言之,您需要:

  • 在托管 C++ 程序集嘗試加載您的本機 C++ dll 之前設置%PATH%環境變量。
  • 使用DllImport屬性設置 dll 路徑(不適用於您的情況,因為您沒有使用 P/Invoke)
  • Manually load the C++ dll yourself (eg with 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM