如何將一個文件夾與一個單擊應用程序捆綁在一起,然後引用這些文件/文件夾?使用.Net應用程序打包一個文件夾
似乎很簡單,但我只是無法弄清楚如何。
如,我有文件index.html
夾UI
中,我想包與應用程序的話,我想用字符串"/UI/index.html"
該文件的流,但是,而不是僅僅index.html
,整個網站。
如何將一個文件夾與一個單擊應用程序捆綁在一起,然後引用這些文件/文件夾?使用.Net應用程序打包一個文件夾
似乎很簡單,但我只是無法弄清楚如何。
如,我有文件index.html
夾UI
中,我想包與應用程序的話,我想用字符串"/UI/index.html"
該文件的流,但是,而不是僅僅index.html
,整個網站。
將文件夾添加到您的VS Project中,右鍵單擊它並選擇「嵌入爲資源」。這將使文件夾中的文件被嵌入到.NET程序集中。爲了讓你的程序文件的內容,你可以使用這樣的事情:
public class ReadResource
{
public string ReadInEmbeddedFile (string filename) {
// assuming this class is in the same assembly as the resource folder
var assembly = typeof(ReadResource).Assembly;
// get the list of all embedded files as string array
string[] res = assembly.GetManifestResourceNames();
var file = res.Where (r => r.EndsWith(filename)).FirstOrDefault();
var stream = assembly.GetManifestResourceStream (file);
string file_content = new StreamReader(stream).ReadToEnd();
return file_content;
}
}
在上面的功能我想你的文件text/html的文件;如果沒有,你可以改變它不返回字符串,但字節[],並使用二進制流讀取器。 我還選擇了file.EndsWith()
這些文件,這些文件足夠滿足我的需求;如果您的文件夾具有深層嵌套結構,則需要修改該代碼以解析文件夾級別。
至少有兩個水平的基礎和水平像'js'或'css'或類似的文件夾。代碼幫助? – FabianCook 2013-02-10 10:14:36
如果您通過http請求提供網站數據,我認爲您已經以某種方式獲得了路徑。因此,如果用戶請求/js/myscript.js或/css/site.css,將此相對路徑傳遞給上述函數,它將起作用(因爲'Yourproject/UI/css/site.css'實際上以'/ css/site.css'。最好是你用調試器看一下'res'變量。它包含您的文件夾結構,但以名稱空間中文件的位置作爲前綴。 – Dyna 2013-02-10 10:17:50
也許有更好的方法,但考慮到內容不是太大,您可以將二進制文件作爲base64字符串直接嵌入到您的程序中。在這種情況下,它需要是該文件夾的存檔。您還需要嵌入用於解壓縮該壓縮文件的dll(如果我理解正確,您希望只有一個.exe文件)。
下面是一個簡單的例子
// create base64 strings prior to deployment
string unzipDll = Convert.ToBase64String(File.ReadAllBytes("Ionic.Zip.dll"));
string archive = Convert.ToBase64String(File.ReadAllBytes("archive.zip"));
string unzipDll = "base64string";
string archive = "probablyaverylongbase64string";
File.WriteAllBytes("Ionic.zip.dll", Convert.FromBase64String(unzipDll));
File.WriteAllBytes("archive.zip", Convert.FromBase64String(archive);
Ionic.Zip.ZipFile archive = new Ionic.Zip.ZipFile(archiveFile);
archive.ExtractAll("/destination");
的解鏈庫是DotNetZip。這很好,因爲你只需要一個dll。 http://dotnetzip.codeplex.com/downloads/get/258012
編輯: 想想吧,只要你將Ionic.dll寫入到.exe的工作目錄中,你就不需要使用動態dll加載,所以我刪除了那部分以簡化答案(在達到它所使用的方法之前,它仍然需要寫入)。
聽起來不錯:)。明天我會嘗試這樣的事情。 – FabianCook 2013-02-10 09:47:27
爲什麼要將二進制文件嵌入到base64中? – 2013-02-10 09:48:44
這允許您直接將數據作爲簡單字符串存儲在程序中,然後在需要時將其轉換回原始字節。 – Despertar 2013-02-10 09:57:36
你能詳細說明''之後引用這些文件/文件夾'是什麼意思嗎?我也沒有看到標題中的網站在哪裏。更多關於你想要做什麼的細節肯定會有所幫助。 – Despertar 2013-02-10 09:02:51
已更新。我只想將一個文件夾與可以使用這些文件的應用程序捆綁在一起。 – FabianCook 2013-02-10 09:24:27