它簡單甚至可能嗎?如何將源文件(.cs)添加到預生成事件中的資源(.resx)?
爲什麼:下面我other question,並使用this approach,現在我想簡單地嵌入源文件的資源,這樣我就可以在應用程序運行時將其複製到臨時文件夾 - 和保持應用程序作爲一個單一的文件。
我假設使用預生成事件是完成此操作的最佳方法。如果是這樣,它將如何完成?
編輯:我想諮詢一下,因爲建我也認爲它不會,如果我添加它手動一次自動更新,然後更改後的代碼之前添加。
它簡單甚至可能嗎?如何將源文件(.cs)添加到預生成事件中的資源(.resx)?
爲什麼:下面我other question,並使用this approach,現在我想簡單地嵌入源文件的資源,這樣我就可以在應用程序運行時將其複製到臨時文件夾 - 和保持應用程序作爲一個單一的文件。
我假設使用預生成事件是完成此操作的最佳方法。如果是這樣,它將如何完成?
編輯:我想諮詢一下,因爲建我也認爲它不會,如果我添加它手動一次自動更新,然後更改後的代碼之前添加。
原來我不需要每次構建解決方案時重新添加源文件!
當我手動添加它,一旦它變成資源「文本」文件 - 我可以很容易地訪問它爲使用Properties.Resources.SourceCode
(其命名爲「SourceCode.cs」的文件)的字符串。是的,自從資源屬性「Persistence」被自動更新:文件在編譯時被鏈接。
我最近通過this same issue爲.NET控件開發了一個示例套件,該套件必須在應用程序中顯示自己的示例源代碼。
我結束的方法如下。
我創建了一個批處理腳本(預編譯運行)的所有代碼文件拷貝在/例子/ *解決方案中的資源/ ExamplesSrc/*
我遂把所有其他文件夾這些文件在csproj的Resources/ExamplesSrc/*下並保存。
下一步是將Resources/ExamplesSrc/*下的所有文件設置爲嵌入式資源並將更改提交給SVN。我沒有提交SVN的例子(生成),只是修改後的csproj和批處理文件。
當開發人員簽出的是,他們有(!)上的所有資源圖標(他們不是在磁盤上,但的csproj一直在尋找它們),但只要他們建立生成的文件效果出現了,一切都很好。這種方法也適用於構建服務器(Team city),而示例套件現在可以通過嵌入式資源加載和瀏覽自己的代碼。
一個警告你應該知道。在VS2010中有一個怪癖(顯然是由設計)。如果嵌入的資源中包含「.cs」(即任何代碼文件!),則無法使用Assembly.GetManifestResourceStream()從程序集加載它。爲了解決這個問題,所有源文件都在批量複製步驟中從* .Xaml.cs重命名爲* .Xaml.c.txt,從* .cs重命名爲* .c.txt
希望這有助於!
哦,我沒有使用版本控制,它只是一個小型的學習/培訓應用程序,但我希望將它發送給我的大學教授和同學,因此準備好代碼是一個優點。還是)感謝你的建議! – 2012-04-26 02:06:57
然後你需要知道,如果你的批處理文件錯誤,它會破壞你的源文件。確保你在做這個之前做好備份! – 2012-04-26 06:50:22
這是否工作,如果源文件更新? – 2012-04-26 11:21:51
@ Dr.AndrewBurnett-Thompson是的,它工作得很好。我甚至嘗試過使用空的.cs文件,然後在創建資源引用後開始編碼。代碼在運行時每次都在那裏。當然,您只需要保存代碼文件。 – 2012-04-26 12:18:54
好吧,讓我弄清楚這一點,你有一個在Project/*下的代碼文件,你可以將相同的源文件添加到resx資源,然後可以作爲字符串訪問?太棒了。我可能會轉換我的代碼使用批處理文件:)順便說一句我的silverlight所以可能有一個問題,但值得一試。感謝您分享您的最新答案 – 2012-04-26 12:44:40