【问题标题】:Relative paths with WinForm and ASP.NET appWinForm 和 ASP.NET 应用程序的相对路径
【发布时间】:2011-03-08 02:05:31
【问题描述】:

我正在编写一个包含两个项目的应用程序。一个项目是客户端应用程序,它是一个 ASP.NET Web 应用程序,另一个是在 WinForms (C# 3.5) 上运行的管理应用程序。这两个项目都引用了一个包含 XML 文件的类。问题是,没有将 XML 文件的目录硬编码到该类中,我无法看到如何指向它的运行目录。

Web 应用在 c:\windows\system32(asp dll 的目录)中查找,winforms 应用在项目的 ~\bin\debug 目录中查找。

鉴于 XML 文件的相对路径因引用它的应用程序而异,我如何形成该文件的相对路径?

【问题讨论】:

    标签: c# asp.net winforms


    【解决方案1】:

    如果您修改引用 XML 文件的类以接受一个参数来告诉它 XML 文件所在的位置,那么您可以让每个应用程序将其自己的位置作为参数传递给该类。

    假设您的类称为 YourClass,其加载 XML 函数称为 LoadXML。

    对于网络应用,您可以使用:

    YourClass.LoadXML(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath);
    

    对于 WinForms 应用,您可以使用:

    YourClass.LoadXML(System.Windows.Forms.Application.StartupPath);
    

    在 YourClass 中,您将使用该参数作为绝对路径,并使用 System.IO.Path.Combine 附加相对路径。

    【讨论】:

      【解决方案2】:

      我知道在使用 WinForms 时,您可以使用 System.IO.Path.GetFullPath(string) 从相对路径返回绝对路径。

      我对网络不是很熟悉,但也许这会有所帮助? http://blog.dotnetclr.com/archive/2009/06/08/506.aspx

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        您可以将 xml 文件添加到将构建操作设置为内容的项目之一,并使用脚本将 xml 文件从一个项目(如果较新)复制到另一个项目,并将构建操作设置为内容。您可以使用构建后事件通过批处理文件 (copyifnewer.bat) 复制 xml 文件:

        @echo off
        echo Comparing two files: %1 with %2
        
        if not exist %1 goto File1NotFound
        if not exist %2 goto File2NotFound
        
        fc %1 %2 
        if %ERRORLEVEL%==0 GOTO NoCopy
        
        echo Files are not the same.  Copying %1 over %2
        copy %1 %2 /y & goto END
        
        :NoCopy
        echo Files are the same.  Did nothing
        goto END
        
        :File1NotFound
        echo %1 not found.
        goto END
        
        :File2NotFound
        copy %1 %2 /y
        goto END
        
        :END
        echo Done.
        

        说 winforms 项目中的后期构建事件将是:

        call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)\XML\myfile.xml"
        "$(ProjectDir)..\WebApp\XML\myfile.xml"
        

        这样,您只需要编辑winforms项目中的一个xml文件,另一个会自动更新。然后可以通过dacris提供的路径,结合相对文件夹XML来访问XML文件。

        或者,如果 Web 应用程序与客户端 winforms 应用程序在同一台计算机上运行,​​请使用公共数据文件夹:

        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-20
          • 1970-01-01
          • 2011-02-11
          • 1970-01-01
          • 2016-08-30
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多