2009-11-11 54 views
5

我有一個C#應用程序,我試圖推送到分佈式網絡。該應用程序在本地工作正常(一如既往),但是當我將它推送到網絡時,它不起作用,因爲它無法寫入C:\ Windows \ Temp目錄。我實際上並沒有調用寫入該目錄的任何代碼,但我想象它是由我對web服務的調用引起的,給出以下例外:防止.NET寫入到C: Windows Temp

無法生成臨時類(結果= 1)。 錯誤CS2001:源文件'C:\ WINDOWS \ TEMP \ cyalinh1.0.cs'不能爲 找到錯誤CS2008:沒有指定輸入'。有關更多詳細信息,請參閱InnerException 。

有什麼辦法可以防止.NET寫入Temp目錄嗎?它是.config文件中的一個設置嗎?

UPDATE

能SGEN被用來防止來自web服務的動態創建類的創造?

+0

,我沒有其他的,而不是告訴你一個答案,你跑成什麼樣的是,當運行時執行程序集,它實際上需要做新一輪的事實Just In Time編譯從IL獲取代碼到機器代碼。 – 2009-11-11 19:50:03

+0

可以通過SGENing通過Web服務調用的dll來阻止這些動態類編譯嗎? – Josh 2009-11-11 21:39:30

回答

4

似乎Web服務需要讀/寫權限%SystemRoot%\ Temp(MSDN)。

here

aspnet_regiis -GA MachineName\Account 

blog post包含說明:

如果您正在運行ASP.NET 2.0或以上 ,您可以用命令分配所需 權限關於如何更改用於此的SystemRoot \ Temp文件夾的位置(以及有關如何使用反射器確定Web中的設置的說明)。配置設置爲這樣的情況)

+0

是否還有一個設置或環境變量(la'TMPDIR')來設置臨時目錄路徑? – 2009-11-11 20:05:44

+0

已編輯的文章添加鏈接以獲取有關如何更改臨時文件夾的說明。 – 2009-11-12 11:59:34

1

您在這裏遇到的問題是您正在使用某些自動生成臨時代碼的功能。它需要一個位置來做到這一點。所以是的,雖然可以防止它將代碼寫入特定位置,但要防止它生成代碼(必須存儲在某處),唯一的方法是不要使用生成臨時類的函數。

0

喬希的過程中,

我的猜測是,你正在呼叫試圖踢關閉目標PC上的調試會話。在發生異常之後,它試圖拉起源文件。

根本原因可能是Web服務調用中的異常。

爲了減輕寫入到臨時文件夾,您可能能夠在目標計算機上禁用剛剛在時間調試: 像<system.windows.forms jitDebugging="false"/>在應用程序配置

我做了一些挖掘。看起來問題可能出在服務器上,而不是客戶端機器上。如果您將託管web服務的用戶的臨時文件夾的讀/寫權限添加到該文件夾​​中,則可能是正確的。對不起,以上的瘋狂建議...

0

搜索了這麼多的論壇,並最終修復它..這對我工作..你去!

  1. 右擊C:\ WINDOWS \ temp文件夾

  2. 安全選項卡下,在iisuser帳戶添加到用戶的列表,並給讀/寫/執行訪問(或)充分的權利

  3. 重新啓動該網站

完蛋了!!! ...檢查你的應用程序,消耗部署的Web服務

這應該做..