1

xmlファイルから読み取り、結果を文字列として返すクラスライブラリを作成しました。しかし、COM +コンポーネントとしてインストールしようとすると、エラーが発生しました(エラーコード:80131501)。イベントログを確認しましたが、エラーの詳細は次のとおりです。

'C:\ Users \ User \ Documents \ Visual Studio 2005 \ Projects \ InteropSOA \ InteropSOA \ bin \ Debug \ InteropSOA.dll'の'{28E82165-AD74-4E16-90C9-0C5CE7DA97AA}'へのインストールが例外で失敗しました:システム.EnterpriseServices.RegistrationException:致命的:インストールしたコンポーネント「InteropSOA.ConfigReader」が見つかりませんでした。System.EnterpriseServices.RegistrationDriver.InstallAssembly(RegistrationConfig regConfig、Object obSync)at System.EnterpriseServices.RegistrationHelper.InstallAssemblyFromConfig(RegistrationConfig&regConfig)at System.EnterpriseServices.RegistrationHelper.InstallAssembly(String assembly、String&application、String partition、String&tlb、InstallationFlags installF )at System.EnterpriseServices.Internal.ComManagedImportUtil.InstallAssembly(String asmpath、String parname、String appname)

以下は、クラスライブラリの開発中に行った手順です。

  • 参照に「System.EnterpriseServices」を追加しました。
  • クラスへの参照をインポートしました。
  • クラスを「ServicedComponent」として宣言しました。
  • プロジェクトのプロパティを設定します([アセンブリをCOM表示にする]チェックボックスをオンにし、[COM相互運用機能に登録する]チェックボックスをオンにし、強力なキーファイル名でアセンブリに署名します)。

これが私のコードです:

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Xml;  
using System.Xml.XPath;  
using System.EnterpriseServices;  


namespace InteropSOA
{
public class ConfigReader : ServicedComponent
{
    // xml file name
    private string strFileName;
    // type of request
    private string strRequest = "";
    // response string
    private string strResponse = "";

    // declarations for xPath
    private XPathDocument doc;
    private XPathNavigator nav;
    private XPathExpression expr;
    private XPathNodeIterator iterator;

    private XmlTextReader reader;
    private XmlDocument xmlDoc;

    public ConfigReader(string strFile, string request)
    {
        this.strFileName = strFile;         
        this.strRequest = request;  

    }

    public ConfigReader()
    { 
        //default contructor
    }

    // reader for console program
    public void ReadXML()
    {
        doc = new XPathDocument(strFileName);
        nav = doc.CreateNavigator();
        // compile xPath expression
        expr = nav.Compile("/Msg/" + strRequest + "/*");
        iterator = nav.Select(expr);

        // interate on the node set
        try
        {
            while (iterator.MoveNext())
            {
                XPathNavigator nav2 = iterator.Current.Clone();
                strResponse += nav2.Value + "|";

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        strResponse = strResponse.Substring(0, strResponse.Length-1);

        Console.WriteLine("Response string = " + strResponse);
    }

    public void WriteXML(string strRequest, string strElement, string strValue)
    {
        reader = new XmlTextReader(strFileName);
        xmlDoc = new XmlDocument();
        xmlDoc.Load(reader);
        reader.Close();


        XmlNode node; 
        XmlElement root = xmlDoc.DocumentElement;
        node = root.SelectSingleNode("/Msg/" + strRequest + "/" + strElement);

        node.InnerText = strValue;

        xmlDoc.Save(strFileName);
    }

    // reader for ASP.NET
    public string ReadXMLElement()
    {
        doc = new XPathDocument(strFileName);
        nav = doc.CreateNavigator();
        // compile xPath expression
        expr = nav.Compile("/Msg/" + strRequest + "/*");
        iterator = nav.Select(expr);

        // interate on the node set
        try
        {
            while (iterator.MoveNext())
            {
                XPathNavigator nav2 = iterator.Current.Clone();
                strResponse += nav2.Value + "|";

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        strResponse = strResponse.Substring(0, strResponse.Length - 1);

        return strResponse;
    }
}

}

4

1 に答える 1

1

Windows 7 UAC を無効にすることで問題が解決しました。

于 2010-03-14T10:59:38.780 に答える