2

構成ファイルの読み込み中にエラーが発生しました: パス '/' をマップできませんでした。次の行を実行してweb.configのパスを取得しようとすると

Configuration config =System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");

Windows 7、Visual Studio 2010、および .net Framework 4.0 を実行しています。管理者として実行する前に同じコードを何度も実行しましたが、今日管理者として実行しても問題は解決されません。チームメイトのラップトップで同じコードを実行しましたが、コードは完全に機能し、ラップトップでそのコードを実行すると機能しません。

私はすべてを試しましたが、何らかの形で絶対パスを指定して一時的に機能させる方法はありますか?最近、状態が悪いため、ウィンドウが問題になる可能性があります. 時間の無駄なので助かります

4

3 に答える 3

5

私は同じ問題を抱えていましたが、最初は管理者として Visual Studio を起動するという同じ回避策を使用していました。

最後に、いくつかのテストを試みたところ、次のようになりました。web.config のファイルマップを作成すると、アプリケーションは管理者権限なしで構成をロードします。

http://msdn.microsoft.com/en-us/library/system.web.configuration.webconfigurationmanager.openmappedwebconfiguration(v=vs.110).aspxの例を使用しましたが、いくつかの変更があります。

    public static Configuration GetConfiguration()
    {
        if (HostingEnvironment.ApplicationVirtualPath == "/")
            return WebConfigurationManager.OpenWebConfiguration("~/web.config");

        WebConfigurationFileMap fileMap = CreateFileMap(HostingEnvironment.ApplicationVirtualPath);
        // Get the Configuration object for the mapped virtual directory.
        return WebConfigurationManager.OpenMappedWebConfiguration(fileMap, HostingEnvironment.ApplicationVirtualPath);
    }

    private static WebConfigurationFileMap CreateFileMap(string applicationVirtualPath)
    {

        WebConfigurationFileMap fileMap =
               new WebConfigurationFileMap();

        // Get he physical directory where this app runs. 
        // We'll use it to map the virtual directories 
        // defined next.  
        string physDir = HostingEnvironment.ApplicationPhysicalPath;

        // Create a VirtualDirectoryMapping object to use 
        // as the root directory for the virtual directory 
        // named config.  
        // Note: you must assure that you have a physical subdirectory 
        // named config in the curremt physical directory where this 
        // application runs.
        VirtualDirectoryMapping vDirMap =
            new VirtualDirectoryMapping(physDir, true);

        // Add vDirMap to the VirtualDirectories collection  
        // assigning to it the virtual directory name.
        fileMap.VirtualDirectories.Add(applicationVirtualPath, vDirMap);

        // Create a VirtualDirectoryMapping object to use 
        // as the default directory for all the virtual  
        // directories.
        VirtualDirectoryMapping vDirMapBase =
            new VirtualDirectoryMapping(physDir, true, "web.config");

        // Add it to the virtual directory mapping collection.
        fileMap.VirtualDirectories.Add("/", vDirMapBase);

        // Return the mapping. 
        return fileMap;
    }

これはあまりクールな修正ではないと思いますが、機能し、#if DEBUG セクションに含めることができます。

これらを使用して、仮想パス設定を「/MyApplication」などに設定してVisual Studio Web開発サーバーを起動すると、管理者権限で起動された場合、権限がない場合には作成されないマッピングが作成されると推測しています。検証できなかった仮説にすぎません。

これが他の人に役立つことを願っています!

于 2014-03-17T11:37:52.353 に答える