访问部分类中的共享成员

时间:2011-02-16 09:58:18

标签: .net vb.net wcf log4net partial-classes

我正在编写WCF服务,我将服务类拆分为多个部分类文件,因此每个ServiceContract-Implementation都会获得自己的文件。我有一个文件但是应该包含例如每个部分类文件(如记录器)使用的成员。如果这有任何问题,该服务将由IIS 7托管。

部分班级档案1

<ServiceBehavior(NameSpace:= WCFHelper.SERVICENAMESPACE, AddressFilterMode:= AddressFilterMode.Any)> _
Partial Public Class DataService

    #Region "Members"
    Private Shared m_Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(DataService))
    #End Region

End Class

部分类文件2 (剪掉不必要的代码以保持示例简单)

Partial Public Class DataService
    Implements IContractAssets

    <SomeCustomAttribute()> _
    Public Function GetData(ByVal ID As Int64) As SomeCustomClass Implements IContractAssets.GetData

        Try
            Return SomeFunction(ID)
        Catch ex As Exception
            m_Log.Error("SomeError.", ex)
            ThrowFault()
        End Try
    End Function
End Class

代码编译很好,但在运行时我得到一个BC30451: The name m_Log is not declared错误(不知道确切的单词。我收到德语消息;))。我不认为它与m_Log或依赖程序集的类型有关,因为如果我尝试使用String,我会得到相同的错误。

我做错了什么?我怎样才能做到这一点?

编辑:我在一个简单的控制台应用程序中尝试相同的事情没有任何问题。 :(

1 个答案:

答案 0 :(得分:2)

最后我想出了导致这个错误的原因。

不幸的是我认为将第二个分类文件放入App_Code目录是个好主意。嗯,不是! :)我将文件移动到根目录后一切正常。

将部分类文件放在不同的目录中似乎本身并不是问题,因为它可以与另一个子目录一起使用。只有当其中一个文件位于App_Code目录(或其他ASP.NET文件夹中,我没有尝试过)时,它才会起作用。