C#如何載入程式執行目錄外的程式集
首先會在GAC中搜索相應的版本,如果未找到則會應用程式配置檔案中找(如果配置),最後到應用程式所在的路徑搜尋。
如何可以將程式集部署的執行目錄的子目錄, 在app.config新增以下配置,其中probing的privatePath就是配置當前程式搜尋的子目錄
<configuration> ... ... <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="Plugins;Libs"/> </assemblyBinding> </runtime> </configuration>
當然我們也可以更詳細的配置,不過似乎一般這麼用的很少,這裡可以指定程式集名稱、公鑰、文化,版本重定向等等資訊
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="myAssembly" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" /> <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/> <codeBase version="2.0.0.0" href="http://www.litwareinc.com/myAssembly.dll"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
如何載入非執行目錄的程式集?也許有的人會想到反射,的確對應單獨的一個程式集我們可以直接呼叫使用 Assembly.LoadFile(@"XXX.dll");載入,再使用反射對其中的方法屬性進行調
用,但是如果這個程式集同時引用了其它的,非應用程式執行目錄下的程式集,這時就會出錯,這個問題該如何解決呢?
我曾嘗試用 Assembly.LoadFile(@"XXX.dll");載入那些依賴的程式集,但是沒有成功,呼叫繼續出錯。使用 AppDomain.CurrentDomain.GetAssemblies()檢視,所有的應用程式集都已經載入到了當前應用程式域,但是為什麼還是找不到依賴的哪些程式集呢?後來查詢未果,希望有高人能回答下。
最後使用了AppDomain.CurrentDomain.AssemblyResolve事件解決了以上問題,希望遇到同樣問題的同學們少走彎路,在程式初始化的時候新增監聽事件
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
在監聽的事件中遇到要載入額外的dll的時候,返回 Assembly.LoadFrom(strTempAssmbPath)即可
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var strTempAssmbPath = "";
if ("qrcsharp" == args.Name.Substring(0, args.Name.IndexOf(",")))
{
var systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
strTempAssmbPath = System.IO.Path.Combine(systemFolder, "qrcsharp.dll");
}
return string.IsNullOrWhiteSpace(strTempAssmbPath) ? null : Assembly.LoadFrom(strTempAssmbPath);
}
相關推薦
C#如何載入程式執行目錄外的程式集
我們的應用程式部署的時候,目錄結構一般不會只有執行程式的目錄這一個,我們可能在執行目錄下建子目錄,也可能使用System32目錄,也可能使用其它第三方的程式集。.Net程式集 首先會在GAC中搜索相應的版本,如果未找到則會應用程式配置檔案中找(如果配置),最後到應用程式所在
C# 程式執行目錄,軟體開機自啟目錄
string exeDir = Application.ExecutablePath;// //string exeDir1 = System.IO.Directory.GetCurrentDirectory();
獲取被載入dll路徑和應用程式執行目錄
獲取程式路徑和獲取載入模組路徑 DWORD GetModuleFileName(HMODULE hModule,LPTSTR lpFilename,DWORD nSize); 函式引數說明: hModule HMODULE 裝載一個程式例項的控制代碼。如果該引數為NULL,
ctrl+c關閉多執行緒python程式
專案中經常需要用到多執行緒,如果一個python程式用了多執行緒,當子執行緒沒有結束時,用ctrl+c是關閉不了主執行緒的,這時候就只能用kill命令殺掉,這樣會很麻煩。 所以探討了下怎麼ctrl+C關閉多執行緒python程式,也在網上查了很多別人的做法,自己做了很多實驗,嘗試了很多種方法,總結得出一個能
C#構建多執行緒應用程式(4) —— 併發問題
在構建多執行緒的應用程式時,我們需要找到一種方式來控制多個執行緒對共享資源的同步訪問。System.Threading名稱空間提供了一些以同步為中心的型別。C#程式語言也提供了一個特別的關鍵字,它能在
程式執行時更改程式外觀
新建自己的VCL程式,在PROJECT>OPTIONS>Application>Appearance 下選擇好自己喜歡的幾個樣式 如下圖 然後按OK。 在視窗中放置PANNEL,頂部對齊;LISTBOX控制元件居中對齊;底部放置一個BUTTON按
教你如何獲得可執行程式的執行目錄、可執行程式名、可執行程式字尾(C\C++)
很多童鞋可能遇見過這個問題。下面給大家講講哈,希望各位有用。 首先,我們應該明白main函式的引數是什麼意思。 int main(int argc, char **argv); 第一個引數說的是,argv中有多少個字串。第二個引數存放的是一些字串,這些字串是系統給出的。其
C++中用 GetModuleFileName()函式 獲得程式當前的執行目錄
//獲取當前程式所在路徑。 //蔡軍生 2007/12/05 QQ:9073204 深圳 void TestGetExePath(void) { // const int nBufSize = 512; TCHAR chBuf[nBufSi
C# 程式執行無法載入 C++ DLL“xxx.dll”: 找不到指定的模組
C# 編寫的web專案在釋出後將拷貝到伺服器上面,訪問系統時如下錯誤資訊: 針對所呼叫的dll為C++編寫的類庫,呼叫方式如下: [DllImport("xxxxxxxx.dll", Cha
linux下C開發多執行緒程式
轉:https://blog.csdn.net/lingfemg721/article/details/6574804 linux下用C開發多執行緒程式,Linux系統下的多執行緒遵循POSIX執行緒介面,稱為pthread。 #
Linux C 程式執行 shell 命令並獲取返回結果的方法
據說有統計資料表明,程式碼的缺陷率是一定的,與所使用的語言無關。Linux提供了很多的實用工具和指令碼,在程式中呼叫工具和指令碼,無疑可以簡化程式,從而降低程式碼的缺陷數目。Linux shell 指令碼也是一個強大的工具,我們可以根據需要編制指
C# TSC列印二維碼和條形碼(轉) C#呼叫dll提示"試圖載入格式不正確的程式"解決方法
效果圖 開發、使用環境說明 安裝TSC_7.3.8_M-3.exe印表機驅動,安裝時選擇對應的ttp 244 pro 將TSCLIB.dll複製到C:\Windows\system 驅動安裝說明 選擇下一步 &nbs
C++程式執行時間
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<ctime> using
編寫一個程式,啟動三個執行緒,三個執行緒的名稱分別是 A,B,C; 每個執行緒將自己的名稱在螢幕上列印5遍,列印順序是ABCABC...
設定標誌位flag 當flag==1時,列印A 當flag==2時,列印B 當flag==3時,列印C 用count控制列印的次數,題目要求列印5遍,即15個字元 這裡的用notifyAll()的原因:是要把其餘兩個全都喚醒,因為如果用notify
JVM (二)--Java程式編譯、類載入及執行
Java程式的編譯 Java程式的編譯是由Java原始碼編譯器來完成,流程圖如下: Java程式的執行 Java程式的編譯是由Java執行引擎來完成,流程圖如下: Java程式碼編譯和執行的整個過程包含了以下三個重要的機制: Java原始
C# 程式執行中的流程控制
1、C#之流程控制語句:計算機程式執行的控制流程由三種基本的控制結構控制,即順序結構,選擇結構,迴圈結構。 1) 順序結構:從上到下,按照書寫順序執行每一條語句,不會發生跳躍。 程式碼段1; // 先執行程式碼段1 程式碼段2; // 接著執行程式碼段2 ... 2)選擇結構:對
C# WPF開機自啟動和只允許一個程式執行
本文出自:https://www.cnblogs.com/2186009311CFF/p/10024949.html 在App.xaml.cs填充一下內容,即可實現只允許一個執行,且不解鎖螢幕的情況下,重啟執行。 public partial class App : Application
如何在Visual C++下除錯執行C程式
本文轉載自網際網路,如有侵權,請聯絡我及時刪除。謝謝。 從2008年4月開始,全國計算機等級考試將全面停止Turbo C2.0(簡稱TC)軟體的使用,所有參加二級C語言、三級資訊科技、網路技術和資料庫技術上機考試的考生,都要在Visual C++6.0(簡稱VC)環
C語言程式執行
vs2013編輯器c程式的執行一、啟動Microsoft Visual C++ 2013版、新建專案 。 檔案——> 新建——> 專案。 2.確定之後 彈出新建專案對話方塊。選擇模板——>Win32——>Win32控制檯應用程式——>
【OS學習筆記】十 真實模式:實現一個程式載入器-程式載入器如何將使用者程式載入到記憶體並執行
上一篇文章學習了以下內容: 用一種不同的分段方法,從另一個不同的的角度理解處理器的分段記憶體訪問機制 使用迴圈和條件轉移指令來優化主引導扇區程式碼 點選連結檢視上一篇文章:點選連結檢視 對於主引導扇區部分。大概前幾篇文章已經學的差不多了。現在是時候跳過主引