在多个人和几个组件(web应用程序,服务应用程序和其他一些)之间做一个项目。我们将在web应用程序的Content文件夹中存储一些信息,以便可以直接从web服务器使用href访问它,但是web应用程序之外的其他组件也需要访问此文件夹,并且由于我们在多人之间共享项目,因此使用绝对路径不是一个选项。我们有什么选择?
编辑:试着更好地解释它。
我所拥有的是,一个web项目,一个"数据项目",这只是一个dll,一个"逻辑"项目,这是另一个dll和一个服务项目,这是一个exe/service。web项目和服务项目都使用逻辑中的方法,也使用数据项目中的逻辑。最后一个负责存储数据(在数据库中)和文件系统。这个"文件系统"路径应该是可配置的,我们的目标是把它放在web项目的内容文件夹中,这样多媒体文件就可以直接访问,而不是通过字节流。
现在在网络上。Config (web应用程序的配置文件)和app. Config(服务应用程序的配置文件)我可以将绝对路径设置为web/content(两个配置文件相同),数据DLL将毫无问题地使用它。现在主要的问题是,我们不能在配置文件中放置一个绝对路径,因为每个人在不同的计算机上工作,显然文件路径不同。所以如果我能在配置文件中写一些像:~/project/Web/Content而不是C:/myfolder/stuff/blabla/project/Web/Content这样的东西,用~解析项目的路径,这就是我想要的!或者更好的想法是如何与这些应用程序共享文件夹,而不需要在某处添加硬编码的绝对路径。
你想用的是:
Server.MapPath("/Content/filepath.ext");
这将根据文件在网站中的位置给出文件的绝对路径,在本例中,从/Content目录。
对于网站外部的程序,您有几个选项;
最容易实现的可能是在指向目录的外部程序中设置一个简单的配置值。我猜你已经决定了这不理想,但这可能是最快的方法。
另外,有一个Microsoft . net程序集可以让您轻松访问IIS信息(我想不起它的名字了!)。您可以使用此程序集查找适当的网站,并检索其根目录。我会看看我是否能找到它并得到一个例子,或者也许其他人会看到这个并发布带有该信息的答案。请检查以下方法"ResolveClientUrl"MSDN使用ResolveClientUrl方法返回一个URL字符串,该字符串适合于客户端访问Web服务器上的资源,例如图像文件、指向附加页面的链接等等。
http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveclienturl.aspx