2009-11-11 70 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服务

这应该做..