我为log4net日志记录对象的初始化创建了一个包装类,以便更容易在ThreadContext中建立自定义属性.这发生在我已经建立的类库中以及许多其他有用的函数中.为了加入所有各种库,我还使用'/ internalize'开关向ILMerge添加了一个AfterBuild目标.
这种初始化方法的所有引用内由ILMerge针对性库似乎工作就好了.但是,当我在其他地方引用这个合并的库时.我的实现会引发保护级错误.我已经尝试向可选的exclude(/internalize:excludes.txt)文件中添加各种内容,但这似乎不起作用.
示例excludes.txt:
log4net.Config
log4net.ThreadContext
log4net.LogManager
Run Code Online (Sandbox Code Playgroud)
其他人遇到过这个问题吗?
[编辑]:
这是代码:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Logging
{
public static class Log4NetThreadContext
{
public static ILog Initialize(Type declaringType)
{
// Read from configuration
XmlConfigurator.Configure();
// Set Properties
ThreadContext.Properties["ID"] = ...
...
...
...
if(System.Diagnostics.Debugger.IsAttached)
{
// Special debugging logger
return LogManager.GetLogger("DEBUG_MODE");
}
else
{
// Root logger
return LogManager.GetLogger(declaringType);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的代码..
private static readonly Type declaringType =
MethodBase.GetCurrentMethod().DeclaringType;
private static readonly ILog log =
Log4NetThreadContext.Initialize(declaringType);
... …Run Code Online (Sandbox Code Playgroud) Nuget,毫无疑问是一个非常有效的包装和分配系统.但是,在某些情况下,管理程序集文件变得很麻烦.对于Web应用程序尤其明显,其中站点中的许多(30+)个子应用程序被设置为继承引用.在我的情况下,单点继承是可取的,因为可以轻松地为所有子项目更新库.我将这些程序集可靠地存储在根目录中已成为一个问题.为了帮助管理这个,我想将GAC用于这些特定的库.
有没有办法通过nuget包脚本将这些库安装/更新到GAC?我总是可以采用传统方式,但如果可能的话,我想利用Nuget.该程序集将添加到服务器GAC,但该程序包的目的是允许开发人员轻松地将程序集安装到其本地GAC并在本地/服务器环境之间维护相同的引用.
我正在尝试一些探索性的事情:
说我有一个图书馆"coolproject",它有依赖关系one.dll,two.dll和three.dll.
我想用ILMerge到coolproject有机结合起来one.dll,并two.dll但不是three.dll.在合并完成后,我应该coolproject.dll和three.dll.无论我打算使用哪里,coolproject.dll我都必须参考three.dll
这甚至可能吗?每当我尝试它,我得到.Unresolved assembly reference not allowed: three.我省略three.dll了设置"Copy Local"= false.
[编辑]:
执行如下:
ILMerge /targetplatform:v2 /log /internalize /out:bin\coolproject.dll obj\Debug\coolproject.dll C:\Users\Nick\Projects\test\bin\one.dll C:\Users\Nick\Projects\test\bin\two.dll
Run Code Online (Sandbox Code Playgroud) 我在IIS中设置了一个网站,其中一个web.config设置在根目录下,用于许多子应用程序虚拟(大约35个),其中一些使用自己独特的覆盖/配置.
我有两个HttpModules,我想一次为所有子应用程序实现.如果不使用GAC,有没有办法在web.config中指定实现,以便这些模块可以应用于所有子应用程序而无需将模块代码重新编译到每个子应用程序中?我可以将HttpModule程序集存储在站点结构中的某个位置,以便所有子应用程序都可以使用它吗?
我正在尝试为.Net Core WebApi应用程序中的某些配置元素创建自定义FileConfigurationProvider实现.
它看起来像这样..
public class MyProvider : FileConfigurationProvider
{
public MyProvider(FileConfigurationSource source) : base(source) { }
public override void Load(Stream stream)
{
try
{
// Stream reading things
}
catch
{
throw new Exception("Failed to load stream.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
尽管这个例子很简单,但覆盖Load(Stream stream)在VS2017 中给出了一个指示器,即没有合适的覆盖方法.此外,另一个错误提示声明了这一点FileConfigurationProvider(System.IO.Stream) is not implemented.
使用ReSharper提取给委托已经显示了一个新的提示,表示要求Load(Stream stream)说明这一点Argument type System.IO.Stream [System.IO, Version=4.1.0.0...] is not assignable to parameter of type System.IO.Stream [System.Private.CoreLib, Version=4.0.0.0...]
尽管有这些错误提示,我仍然可以成功构建并运行此代码.
有人可以帮我理解这里有什么问题吗?
csproj如下..
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup> …Run Code Online (Sandbox Code Playgroud)