我已经用C#创建了一个自定义程序集,将被许多不同的现有系统使用,在使程序集与我们的系统配合工作时有相当多的配置涉及,因此为了使事情变得更容易,我们决定创建本地NuGet服务器并将程序集打包到NuGet包中。 这个做法完美地奏效了,我们能够添加程序集所需的所有依赖项,并添加web.config.transform文件以合并所需的任何其他节点。
这就是我们遇到的第一个问题…
首先像我之前提到的一样,这个程序集是用C#编写的,我们测试运行的应用程序是用VB.Net编写的。 由于我们在程序集中使用了log4net,因此我们实现了WebActivatorEx以确保在应用程序启动时它被初始化,这意味着我们有一个AppStart类,坐落在App_Start文件夹中。 然而,参考WebActivatorEx文档后,我们注意到如果项目是网站(而不是Web应用程序),则AppStart类必须位于App_Code文件夹中而不是App_Start文件夹中,并且还必须使用PostApplicationStartMethod而不是PreApplicationStartMethod。
此外,由于AppStart类是用C#编写的,并且将坐落在VB.Net项目中,因此我们需要将其转换为VB,仅在目标项目为VB时才进行转换,以避免处理更多的配置文件,这是我们正在尝试最小化的事情之一。
简而言之,这里的主要问题是:
1.我们的NuGet包是否可以有某种条件行为,即如果它是VB.Net项目,请将AppStart类添加到VB.Net中,如果是C#,则保留为C#。
2.如果项目是网站,则将此AppStart类放置在App_Code文件夹中并使用PostApplicationStartMethod,如果项目是Web应用程序,则将AppStart类放置在App_Start文件夹中并使用PreApplicationStartMethod。
3.在初始化log4net而无需重新编写目标应用程序的global.asax方面,这是否是正确的方法?
4.我知道您可以在NuGet包内运行PowerShell命令,是否有任何方式使用此来判断项目是C#还是VB,还是我正在使事情变得复杂,应该只为每种情况创建4个不同的NuGet包,但这似乎是错误的。
这就是我们遇到的第一个问题…
首先像我之前提到的一样,这个程序集是用C#编写的,我们测试运行的应用程序是用VB.Net编写的。 由于我们在程序集中使用了log4net,因此我们实现了WebActivatorEx以确保在应用程序启动时它被初始化,这意味着我们有一个AppStart类,坐落在App_Start文件夹中。 然而,参考WebActivatorEx文档后,我们注意到如果项目是网站(而不是Web应用程序),则AppStart类必须位于App_Code文件夹中而不是App_Start文件夹中,并且还必须使用PostApplicationStartMethod而不是PreApplicationStartMethod。
此外,由于AppStart类是用C#编写的,并且将坐落在VB.Net项目中,因此我们需要将其转换为VB,仅在目标项目为VB时才进行转换,以避免处理更多的配置文件,这是我们正在尝试最小化的事情之一。
简而言之,这里的主要问题是:
1.我们的NuGet包是否可以有某种条件行为,即如果它是VB.Net项目,请将AppStart类添加到VB.Net中,如果是C#,则保留为C#。
2.如果项目是网站,则将此AppStart类放置在App_Code文件夹中并使用PostApplicationStartMethod,如果项目是Web应用程序,则将AppStart类放置在App_Start文件夹中并使用PreApplicationStartMethod。
3.在初始化log4net而无需重新编写目标应用程序的global.asax方面,这是否是正确的方法?
4.我知道您可以在NuGet包内运行PowerShell命令,是否有任何方式使用此来判断项目是C#还是VB,还是我正在使事情变得复杂,应该只为每种情况创建4个不同的NuGet包,但这似乎是错误的。
PreApplicationStartMethod
,因为当该方法触发时,App_Code
文件夹甚至还没有编译。然而,OP需要考虑是否真的有必要这么早初始化log4net
。 - general exception