我无法读取android平台资产文件夹中的 nlog.config 文件
NLog.LogManager.Configuration = new XmlLoggingConfiguration("NLog.config");
如何读取nlog文件,并且该文件也位于android资产中。
答案 0 :(得分:1)
您还可以尝试将此( nlog.config 文件与Build Action一起用作AndroidAsset):
NLog.LogManager.Configuration = new XmlLoggingConfiguration (XmlTextReader.Create(Assets.Open ("NLog.config")), null);
指的是: https://github.com/NLog/NLog/blob/master/src/NLog/Config/LoggingConfigurationFileLoader.cs#L101-L120
答案 1 :(得分:0)
您可以在上下文类中添加扩展方法,以将所需的资产作为流获取:
public static class Utils
{
public static Stream GetFromAssets(this Context context, string assetName)
{
AssetManager assetManager = context.Assets;
Stream inputStream;
try
{
using (inputStream = assetManager.Open(assetName))
{
return inputStream;
}
}
catch (Exception e)
{
return null;
}
}
}
然后在您的活动上下文中按以下方式访问它:
var Asset= context.GetFromAssets("AssetName");
请注意,这将返回System.IO.Stream。
祝你好运
在查询的情况下还原。
答案 2 :(得分:0)
对于Xamarin,资产文件夹中的Android“ NLog.config”(在此情况下)将自动加载。如果文件名不同,请使用:
LogManager.Configuration = new XmlLoggingConfiguration("assets/someothername.config");
答案 3 :(得分:0)
您还可以使用Xamarin资源。将NLog.config文件放入库项目中,然后编辑文件的属性-将生成操作更改为嵌入式资源。
public static Stream GetEmbeddedResourceStream(Assembly assembly, string resourceFileName)
{
var resourcePaths = assembly.GetManifestResourceNames()
.Where(x => x.EndsWith(resourceFileName, StringComparison.OrdinalIgnoreCase))
.ToList();
if (resourcePaths.Count == 1)
{
return assembly.GetManifestResourceStream(resourcePaths.Single());
}
return null;
}
var nlogConfigFile = GetEmbeddedResourceStream(myAssembly, "NLog.config");
if (nlogConfigFile != null)
{
var xmlReader = System.Xml.XmlReader.Create(nlogConfigFile);
NLog.LogManager.Configuration = new XmlLoggingConfiguration(xmlReader, null);
}
答案 4 :(得分:0)
感谢您的回复。我通过设置autoReload =“ false” throwExceptions =“ false”解决了此问题。由于这两个原因,我的配置文件不可见。我不知道它们如何影响文件的可见性,但将以上两个设置为false我现在可以获取配置文件 谢谢,