簡體   English   中英

從dll讀取Main Project中的文件

[英]Read a file in Main Project from dll

我創建了一個項目,其中包含許多要在另一個項目中重復使用的自定義控件。 但是現在,當我想創建一個“ ad-control”用戶控件時,我需要為每個項目使用不同的廣告代碼。因此,如何向我的Main項目中添加配置文件並從dll中讀取該文件的密鑰?

例如 ,我使用了Google Analytics(分析),並看到當我將此引用安裝到我的項目中時,他們也添加了一個xml文件。

在此處輸入圖片說明

我想您可以使用XmlReader 您似乎在使用的GoogleAnalyticsSDK軟件包中至少使用了這種方法。

您可以使用此鏈接簽出EasyTrackerConfig類的源代碼,因為此庫源代碼已打開。

下面的代碼示例顯示了如何實例化XmlReader

var xmlReader = XmlReader.Create("analytics.xml");

然后,您可以檢查EasyTrackerConfig類的LoadLoadConfigXml方法,以了解如何讀取屬性。 以防萬一下面提供了它們:

internal static EasyTrackerConfig Load(XmlReader reader)
{
    // advance to first element
    while (reader.NodeType != XmlNodeType.Element && !reader.EOF)
    {
        reader.Read();
    }
    if (!reader.EOF && reader.Name == "analytics")
    {
        return LoadConfigXml(reader);
    }
    return new EasyTrackerConfig();
}

private static EasyTrackerConfig LoadConfigXml(XmlReader reader)
{
    var result = new EasyTrackerConfig();
    reader.ReadStartElement("analytics");
    do
    {
        if (reader.IsStartElement())
        {
            switch (reader.Name)
            {
                case "trackingId":
                    result.TrackingId = reader.ReadElementContentAsString();
                    break;
                case "appName":
                    result.AppName = reader.ReadElementContentAsString();
                    break;
                case "appVersion":
                    result.AppVersion = reader.ReadElementContentAsString();
                    break;
                case "appId":
                    result.AppId = reader.ReadElementContentAsString();
                    break;
                case "appInstallerId":
                    result.AppInstallerId = reader.ReadElementContentAsString();
                    break;
                case "sampleFrequency":
                    result.SampleFrequency = reader.ReadElementContentAsFloat();
                    break;
                case "dispatchPeriod":
                    var dispatchPeriodInSeconds = reader.ReadElementContentAsInt();
                    result.DispatchPeriod = TimeSpan.FromSeconds(dispatchPeriodInSeconds);
                    break;
                case "sessionTimeout":
                    var sessionTimeoutInSeconds = reader.ReadElementContentAsInt();
                    result.SessionTimeout = (sessionTimeoutInSeconds >= 0) ? TimeSpan.FromSeconds(sessionTimeoutInSeconds) : (TimeSpan?)null;
                    break;
                case "debug":
                    result.Debug = reader.ReadElementContentAsBoolean();
                    break;
                case "autoAppLifetimeTracking":
                    result.AutoAppLifetimeTracking = reader.ReadElementContentAsBoolean();
                    break;
                case "autoAppLifetimeMonitoring":
                    result.AutoAppLifetimeMonitoring = reader.ReadElementContentAsBoolean();
                    break;
                case "anonymizeIp":
                    result.AnonymizeIp = reader.ReadElementContentAsBoolean();
                    break;
                case "reportUncaughtExceptions":
                    result.ReportUncaughtExceptions = reader.ReadElementContentAsBoolean();
                    break;
                case "useSecure":
                    result.UseSecure = reader.ReadElementContentAsBoolean();
                    break;
                case "autoTrackNetworkConnectivity":
                    result.AutoTrackNetworkConnectivity = reader.ReadElementContentAsBoolean();
                    break;
                default:
                    reader.Skip();
                    break;
            }
        }
        else
        {
            reader.ReadEndElement();
            break;
        }
    }
    while (true);
    return result;
}

您可以創建一個NuGet包並指定要包含在最終nupkg文件中的文件。

轉到您的.csproj文件夾並運行nuget spec 然后,修改生成的projectName.nuspec文件以包含一個files部分。 例如,在這里,我表明我希望將來自指定位置的所有txt文件復制到目標位置:

  <files>
    <file src="headers\*.txt" target="content\headers" />
  </files>

target位置是相對於packages/nameOfYourDllpackages是包含您通過NuGet下載的所有dlls的文件夾。

下一步是使用nuget pack projectName.csproj打包您的NuGet包。 這將產生一個projectName.nupkg文件。 這就是通過NuGet Manager在另一個項目中部署dll的方式。

現在,您可以將dll上傳到NuGet或將其復制到驅動器上的某個位置。 使用第二個選項,然后可以進入Visual Studio的“工具”->“庫軟件包管理器”->“軟件包管理器設置”,然后從左側菜單中選擇“軟件包源”。 然后,您可以添加保存nupkg文件的位置。

現在,您可以在項目中的“引用”上單擊鼠標右鍵,然后轉到“管理NuGet包”。 但是,您可以從左側菜單中選擇本地的NuGet“存儲庫”,而不是在nuget.org上進行搜索。 安裝選定的本地軟件包后,來自src的文件將被復制到target位置,並且您的dll將有權訪問它們。 您現在只需要查找有意義的路徑。

我們很快就給出了這個答案,但是如果您覺得有用的話,我可以澄清一下。

您可以使用配置文件並使用ConfigurationManager類讀取設置

因此,如果您有一個名為LibraryProject的圖書館項目,則可以通過以下方式訪問名為myKey的設置:

string value = ConfigurationManager.AppSettings["myKey"];

此設置需要在主項目的配置文件中聲明,如果是Web項目,則在web.config聲明;對於任何其他類型,則需要在app.config中聲明(如果我沒記錯的話)。 在這些文件中,您可以在<appSettings>部分中聲明自己的設置,如下所示:

<appSettings>
    <add key="myKey" value="myValue"/>
</appSettings>

如果確實需要僅將設置存儲在庫項目的配置文件中,請查看此問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM