我有一个程序集,其中包含一个可以从IIS或控制台应用程序调用的函数。
正因为如此,我选择了以下方式来获取路径:
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
显然,在从IIS调用函数的情况下,这将返回bin目录。
我打算在此路径上创建一个txt文件。将文本文件放在bin目录中真的是个坏主意吗?请给出有效的反对意见(如果有),为什么这可能会导致问题。
发布于 2009-12-09 09:36:16
Assembly.Location
可能会返回令人惊讶的结果,例如,如果打开了卷影复制(例如,当通过NUnit运行时),或者当从不在本地文件系统上的位置运行时(您可以通过HTTP运行.NET应用程序)。
AppDomain.CurrentDomain.BaseDirectory
是一个更安全的选择,因为它在卷影复制之前返回原始路径(尽管在HTTP部署的情况下,我认为它返回ieexec.exe
所在的目录)。
最安全的选项是将所需的任何数据作为资源嵌入到程序集中,并在运行时使用Assembly.GetManifestResourceStream
访问它。
发布于 2009-12-09 09:34:28
您可能没有足够的权限写入此目录。尝试使用TEMP
文件夹(想想Path.GetTempPath()
)。
发布于 2009-12-09 09:35:41
如果您删除"bin“目录中的/copy/overwrite文件,IIS将重新启动进程-因为IIS认为应用程序已更改,因此应使用" new”应用程序操作继续新的请求。
所以,是的,,这是个坏主意。
https://stackoverflow.com/questions/1872660
复制