Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将杂项文件放在bin目录中是个坏主意_.net_Asp.net_Iis - Fatal编程技术网

.net 将杂项文件放在bin目录中是个坏主意

.net 将杂项文件放在bin目录中是个坏主意,.net,asp.net,iis,.net,Asp.net,Iis,我有一个程序集,其中包含一个可以从IIS或控制台应用程序调用的函数 因此,我选择了以下方法来获取路径: System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) 显然,在从IIS调用函数的情况下,这将返回bin目录 我打算在此路径上创建一个txt文件。将文本文件放在bin目录中是一个坏主意吗?请给出有效的反对意见(如果有),说明这可能导致问题的原因。您可能没有足够的权限

我有一个程序集,其中包含一个可以从IIS或控制台应用程序调用的函数

因此,我选择了以下方法来获取路径:

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
显然,在从IIS调用函数的情况下,这将返回bin目录


我打算在此路径上创建一个txt文件。将文本文件放在bin目录中是一个坏主意吗?请给出有效的反对意见(如果有),说明这可能导致问题的原因。

您可能没有足够的权限写入此目录。尝试改用
TEMP
文件夹(想想
Path.GetTempPath()
)。

如果删除/复制/覆盖“bin”目录中的文件,IIS将重新启动进程-因为IIS认为应用程序已更改,所以新的请求应使用“新建”应用程序操作进行


因此,yes这是个坏主意。

Assembly.Location
可能会返回令人惊讶的结果,例如,如果启用了卷影复制(例如,在通过NUnit运行时),或者从不在本地文件系统上的位置运行时(可以通过HTTP运行.NET应用程序)

AppDomain.CurrentDomain.BaseDirectory
是一个更安全的选项,因为它在卷影复制之前返回原始路径(尽管在HTTP部署的情况下,我认为它返回
ieexec.exe
所在的目录)


最安全的选择是将所需的任何数据作为资源嵌入程序集中,并使用
assembly.GetManifestResourceStream
在运行时访问它。

蒂姆·罗宾逊的想法是正确的


我要说的另一件事是,如果ASP.NET正在编写文件,请小心线程代码;可能对同一页的两个请求会试图同时写入同一个文件,因此请小心锁定对该文件的写入。

的确,因此,对其中任何文件的任何更改都将导致IIS重置?我认为这只是对DLL和web.configAny文件的更改导致IIS重置-因为程序集可以有任何扩展名或没有扩展名,或者文件不是程序集,但可以是应用程序的一部分。理想情况下,使用System.IO.Path.GetTempPath()命令事实上,这是一个很好的建议,我唯一不喜欢的是临时目录是一个模糊的位置,而且还受到外部力量的影响(比如管理员清理它)