MSBuild 不会编译我的解决方案,它失败并出现严重且荒谬的错误

问题描述 投票:0回答:1

我有一个项目可以完美编译到 vs2012 中,没有任何警告/错误。

当我尝试使用 msbuild 3.5 或 3.0 编译同一项目时,出现以下错误:

Microsoft (R) Build Engine, versión 3.5.30729.5420
[Microsoft .NET Framework, versión 2.0.50727.5420]
Copyright (C) Microsoft Corporation 2007. Reservados todos los derechos.

Build started 12/05/2013 22:50:43.
Project "C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Virtuosa Game Packer.sln" on node 0 (default targets).
  Building solution configuration "Debug|Any CPU".
Project "C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Virtuosa Game Packer.sln" (1) is building "C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Extractor.vbproj" (2) on node 0 (default targets).
Project file contains ToolsVersion="4.0", which is not supported by this version of MSBuild. Treating the project as if it had ToolsVersion="3.5".
CoreResGen:
  No hay ningún recurso obsoleto con respecto a sus archivos de código fuente. Se omitirá la generación de recursos.
C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(24): error BC30124: La propiedad sin un especificador 'ReadOnly' o 'WriteOnly' debe proporcionar una instrucci¾n 'Get' y una instrucci¾n 'Set'.
C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(25): error BC30634: La instrucci¾n no puede aparecer dentro del cuerpo de una propiedad. Se supone el final de la propiedad.
C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(25): error BC30025: Falta 'End Property' en Property.
C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(57): error BC32035: El especificador de atributo no es una instrucci¾n completa. Utilice una continuaci¾n de lÝnea para aplicar el atributo a la instrucci¾n siguiente.
C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(61): error BC30456: 'Key' no es un miembro de 'Virtuosa_Game_Packer.Shortcut.HotKeyEventArgs'.
Done Building Project "C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Extractor.vbproj" (default targets) -- FAILED.
Done Building Project "C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Virtuosa Game Packer.sln" (default targets) -- FAILED.

Build FAILED.

"C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Virtuosa Game Packer.sln" (default target) (1) ->
"C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\Extractor.vbproj" (default target) (2) ->
(CoreCompile target) -> 
  C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(24): error BC30124: La propiedad sin un especificador 'ReadOnly' o 'WriteOnly' debe proporcionar una instrucci¾n 'Get' y una instrucci¾n 'Set'.
  C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(25): error BC30634: La instrucci¾n no puede aparecer dentro del cuerpo de una propiedad. Se supone el final de la propiedad.
  C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(25): error BC30025: Falta 'End Property' en Property.
  C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(57): error BC32035: El especificador de atributo no es una instrucci¾n completa. Utilice una continuaci¾n de lÝnea para aplicar el atributo a la instrucci¾n siguiente.
  C:\Projects\game\WindowsApplication10 - copia\Extractor_backup\GlobalHotkeys.vb(61): error BC30456: 'Key' no es un miembro de 'Virtuosa_Game_Packer.Shortcut.HotKeyEventArgs'.

    0 Warning(s)
    5 Error(s)

Time Elapsed 00:00:00.25

我完全有必要使用 msbuild 编译这个项目,我需要避免这些错误。

可能的解决方案 1?:msbuild.exe 中的开关或其他东西来忽略关键错误?

可能的解决方案2?:如果有人可以帮助对我的类进行必要的修改(我不知道如何自己做):

这是 GlobalHotkeys 类,其中所有都是假定的错误...(就像我说的,可以使用 VS IDE 编译该项目,而不会出现任何错误或警告):

#Region " GlobalHotkeys Class "

Class Shortcut

    Inherits NativeWindow
    Implements IDisposable

    Protected Declare Function UnregisterHotKey Lib "user32.dll" (ByVal handle As IntPtr, ByVal id As Integer) As Boolean
    Protected Declare Function RegisterHotKey Lib "user32.dll" (ByVal handle As IntPtr, ByVal id As Integer, ByVal modifier As Integer, ByVal vk As Integer) As Boolean

    Event Press(ByVal sender As Object, ByVal e As HotKeyEventArgs)
    Protected EventArgs As HotKeyEventArgs, ID As Integer

    Enum Modifier As Integer
        None = 0
        Alt = 1
        Ctrl = 2
        Shift = 4
    End Enum

    Class HotKeyEventArgs

        Inherits EventArgs
        Property Modifier As Shortcut.Modifier
        Property Key As Keys

    End Class

    Class RegisteredException

        Inherits Exception
        Protected Const s As String = "Shortcut combination is in use."

        Sub New()
            MyBase.New(s)
        End Sub

    End Class

    Private disposed As Boolean

    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not disposed Then UnregisterHotKey(Handle, ID)
        disposed = True
    End Sub

    Protected Overrides Sub Finalize()
        Dispose(False)
        MyBase.Finalize()
    End Sub

    Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub

    <DebuggerStepperBoundary()>
    Sub New(ByVal modifier As Modifier, ByVal key As Keys)
        CreateHandle(New CreateParams)
        ID = GetHashCode()
        EventArgs = New HotKeyEventArgs With {.Key = key, .Modifier = modifier}
        If Not RegisterHotKey(Handle, ID, modifier, key) Then Throw New RegisteredException
    End Sub

    Shared Function Create(ByVal modifier As Modifier, ByVal key As Keys) As Shortcut
        Return New Shortcut(modifier, key)
    End Function

    Protected Sub New()
    End Sub

    Protected Overrides Sub WndProc(ByRef m As Message)
        Select Case m.Msg
            Case 786
                RaiseEvent Press(Me, EventArgs)
            Case Else
                MyBase.WndProc(m)
        End Select
    End Sub

End Class

#End Region
.net vb.net visual-studio msbuild
1个回答
4
投票

framework目标版本和language版本之间存在差异。听起来您正在使用新的语言功能,并且针对 .NET 3.0 或 3.5;没问题,但是您需要使用能够理解这些语言功能的编译器

基本上,使用 MSBuild 4(或任何当前版本)。您仍然可以用它来定位 .NET 3.0。或者,限制自己使用较旧的语言功能。 Visual Studio 中有一个对话框,用于选择项目应让您使用的语言版本(或者至少对于 C# 项目有):

enter image description here

注意:我不知道VB是否提供了类似的选项来帮助您将自己限制为特定的语言版本。


具体来说,我怀疑这里的语言功能是“自动实现的属性” - 如果您坚持使用较旧的编译器,则必须使用长手语法。

© www.soinside.com 2019 - 2024. All rights reserved.