我看到了一些需要讓程序集可用於傳遞給函數的第一個參數的類型。我想是的,我無法弄清楚我錯過了什麼。爲什麼System.Web.Hosting.ApplicationHost.CreateApplicationHost會拋出System.IO.FileNotFoundException?
此代碼在服務中。我在'NETWORK SERVICES'用戶帳戶下運行該服務時,當我將帳戶更改爲會話登錄時,它的工作正常。但是,有什麼區別,我如何才能讓它爲NETWORK SERVICES用戶工作。
我看到了一些需要讓程序集可用於傳遞給函數的第一個參數的類型。我想是的,我無法弄清楚我錯過了什麼。爲什麼System.Web.Hosting.ApplicationHost.CreateApplicationHost會拋出System.IO.FileNotFoundException?
此代碼在服務中。我在'NETWORK SERVICES'用戶帳戶下運行該服務時,當我將帳戶更改爲會話登錄時,它的工作正常。但是,有什麼區別,我如何才能讓它爲NETWORK SERVICES用戶工作。
我終於找到了答案:它看起來ApplicationHost.CreateApplicationHost()的類型必須位於GAC中的程序集中。 簡單,愚蠢:)
網絡服務是一個內置帳戶,對資源的訪問非常有限(出於很好的理由)。你可能不應該改變它,因爲你會打開你的網站到其他潛在的漏洞。
如果您絕對需要,請參閱here瞭解如何將其配置爲可以訪問其他資源。
我認爲這與網絡服務帳戶或代碼訪問安全性更密切相關,與GAC無關。我正在使用CreateApplicationHost()在MS Test項目中創建一個ASP.Net主機,它的工作原理類似於冠軍。我使用的類型不在部署到GAC甚至是強名稱的程序集中(它在TestProject中定義)。
你一定喜歡這些不一致的地方......它讓生活變得有趣。
我也有這個問題。我認爲運行時正在嘗試加載包含作爲CreateApplicationHost的第一個參數傳遞的類型的程序集,並且它無法找到它
有些奇怪的原因,當我在物理目錄中創建bin目錄時(第三個參數)包含包含它正試圖加載的類型的exe或程序集。
我不知道爲什麼它不會在工作目錄中先來看看......
您的二進制文件複製到你的Web應用程序的bin文件夾也將解決這個問題。
順便說一下,this頁面有更多關於此主題的信息,以及一種解決GAC與將程序集複製到bin文件夾的問題的可能方法。該頁面在這一點上已經有幾年了,但它似乎仍然相關。
我不能得到這個在Windows 2008上工作,要麼在.NET2(64位,但我不認爲這比什麼都重要)。它在我的用戶是本地管理員時起作用,但我不希望我的服務以提升的權限運行。我搜索了高和低,並最終找出了它(不需要將程序集添加到GAC中,對我也同樣糟糕):爲我自己託管的站點創建web.config文件,該文件設置了用於探測的bin文件夾。在我沒有web.config文件之前,因爲我的網站都是用代碼處理的。這是我的配置文件現在看起來像:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin"/>
</assemblyBinding>
</runtime>
</configuration>
很酷。你有沒有在我可以看到的一些文檔中找到這個...或者是通過試驗和錯誤? – 2009-01-19 14:32:52