2014-03-19 92 views
3

即時工作在C#WinForms應用程序。我需要嵌入一個.dll文件,並嘗試將這個文件從資源「導出」到硬盤。C#GetManifestResourceStream返回null

使用默認的形式資源林...

System.IO.Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("FormNamespace.Form1.Newtonsoft_Json"); 

的文件名是Newtonsoft.Json.dll和我也嘗試:

System.IO.Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("FormNamespace.Form1.Newtonsoft.Json.dll"); 

兩個不到風度的工作。 s始終爲空。 我認爲,即時通訊使用了錯誤的方式訪問資源,但我不知道:(

將是很好,如果有人可以幫助我:)

+0

你嘗試只是Json.dll'System.IO.Stream S = Assembly.GetExecutingAssembly()GetManifestResourceStream( 「Json.dll」);'? – selkathguy

+0

獲取傳遞給GetManifestResourceStream錯誤的字符串是一個非常常見的問題。這就是爲什麼Visual Studio有一個資源設計器,Project + Properties,Resources選項卡。您可以通過查看實際名稱來調試它,在程序集上運行ildasm.exe,雙擊清單並查看.mresource指令。不要將可執行代碼隱藏在資源中。 –

+0

謝謝,以後再檢查一下。 – zAfLu

回答

5

如果您已設置正確生成操作爲「嵌入的資源」 ,問題很可能是資源的名稱。

應該命名空間+文件名;你有沒有試過FormNamespace.Newtonsoft_Json.dll

否則,你可以嘗試執行GetManifestResourceNames方法,看看它返回。

+0

是,不到風度工作:/ – zAfLu

+0

GetManifestResourceName回報:FormNamespace.Properties.Resources.resources ......但dosnt工作太 – zAfLu

+0

@zAfLu:你確定生成操作設置正確? –

0

您應該提供資源的所有路徑。例如 [DLLNAME或命名空間]。[資源名稱] 如果資源位於res文件夾,然後 [DLLNAME或命名空間]。[Res.Resource.txt]

0

如果您使用Assembly.GetExecutingAssembly(),那麼你會得到一個更好的路徑到資源執行以下操作:

var assembly = Assembly.GetExecutingAssembly(); 
var s = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.Json.dll");