【发布时间】:2014-07-09 21:12:53
【问题描述】:
我已经在 C# 中创建了一个自定义程序集,该程序集将被许多不同的现有系统使用,为了让这个程序集与我们的系统一起工作,需要进行很多配置,所以为了让事情变得更容易,我们决定创建本地 NuGet 服务器并将程序集滚动到 NuGet 包中。
这运行得非常好,我们能够添加程序集所需的所有依赖项并添加 web.config.transform 文件以合并所需的任何其他节点。
这是我们遇到的第一个绊脚石......
首先,正如我之前提到的,程序集是用 C# 编写的,我们正在测试运行的应用程序是用 VB.Net 编写的。当我们在程序集中使用log4net 时,我们已经实现了WebActivatorEx 以确保它在应用程序启动时被初始化,这意味着我们有一个AppStart 类,它位于App_Start 文件夹中。然而,在参考了WebActivatorEx 文档后,我们注意到如果项目是一个网站 与一个Web 应用程序 相对,那么AppStart 类必须位于@987654327 中@ 文件夹而不是 App_Start 文件夹,并且还必须使用 PostApplicationStartMethod 而不是 PreApplicationStartMethod。
此外,AppStart 类是用 C# 编写的,并且将位于 VB.Net 项目中,只有当目标项目是 VB 时,我们才需要将其转换为 VB,以避免弄乱我们正在尝试的更多配置文件尽量减少。
简而言之,这里的主要问题是:
-
我们的 NuGet 包能否具有某种条件行为,即如果它是一个 VB.Net 项目,则在 VB.Net 中添加
AppStart类,如果它是 C#,则将其保留为 C#。 -
如果项目是网站,则将此
AppStart类放在App_Code文件夹中并使用PostApplicationStartMethod,如果项目是 Web 应用程序,则将AppStart类放在App_Start文件夹中并使用PreApplicationStartMethod. -
在不重写目标应用程序的 global.asax 的情况下,这甚至是初始化 log4net 的正确方法吗
-
我知道您可以在 NuGet 包中运行 PowerShell 命令,是否可以使用它来确定项目是否为 C# || VB 还是我把事情复杂化了,我应该为每个场景简单地创建 4 个不同的 NuGet 包,但这似乎完全错误。
我将等待并欢迎任何建议或 cmets。
【问题讨论】:
标签: c# .net vb.net powershell nuget