Share via


Cómo: Publicar un proyecto que tiene una configuración regional específica

Actualización: noviembre 2007

No es raro que una aplicación contenga componentes con configuraciones regionales diferentes. En este escenario, tendría que crear una solución que tenga varios proyectos y, a continuación, publicar proyectos independientes para cada configuración regional. En este procedimiento se muestra cómo usar una macro para publicar el primer proyecto en una solución mediante la configuración regional 'en'. Si desea probar este procedimiento con una configuración regional distinta de 'en', asegúrese de establecer localeString en la macro para que coincida con la configuración regional que está usando (por ejemplo, 'de' o 'de-DE').

Nota:

Al usar esta macro, la ubicación de publicación debe ser una dirección URL válida o un recurso compartido de la Convención de nomenclatura universal (UNC). Además, Internet Information Services (IIS) debe estar instalado en el equipo. Para instalar IIS, en el menú Inicio, haga clic en el Panel de control. Haga doble clic en Agregar o quitar programas. En Agregar o quitar programas, haga clic en Agregar o quitar componentes de Windows. En el Asistente para componentes de Windows, active la casilla Internet Information Services (IIS) en la lista Componentes. A continuación, haga clic en Finalizar para cerrar el asistente.

Para crear la macro de publicación

  1. Para abrir el Explorador de macros, en el menú Herramientas, elija Macros y, a continuación, haga clic en Explorador de macros.

  2. Cree un nuevo módulo de macros. En el Explorador de macros, seleccione MyMacros. En el menú Herramientas, elija Macros y, a continuación, haga clic en Nuevo módulo de macros. Asigne al módulo el nombre PublishSpecificCulture.

  3. En el Explorador de macros, expanda el nodo MyMacros y, a continuación, abra el módulo PublishAllProjects haciendo doble clic en él (o bien, en el menú Herramientas, elija Macros y, a continuación, haga clic en IDE de macros).

  4. En el IDE de macros, agregue el código siguiente al módulo, después de las instrucciones Import:

    Module PublishSpecificCulture
        Sub PublishProjectFirstProjectWithEnLocale()
            ' Note: You should publish projects by using the IDE at least once
            ' before you use this macro. Items such as the certficate and the 
            ' security zone must be set.
            Dim localeString As String = "en"
    
            ' Get first project.
            Dim proj As Project = DTE.Solution.Projects.Item(1)
            Dim publishProperties As Object = proj.Properties.Item("Publish").Value
    
            ' GenerateManifests and SignManifests must always be set to
            ' True for publishing to work. 
            proj.Properties.Item("GenerateManifests").Value = True
            proj.Properties.Item("SignManifests").Value = True
    
            'Set the publish language.
            'This will set the deployment language and pick up all 
            ' en resource dlls:
            Dim originalTargetCulture As String = _
                publishProperties.Item("TargetCulture").Value
            publishProperties.Item("TargetCulture").Value = localeString
    
            'Append 'en' to end of publish, install, and update URLs if needed:
            Dim originalPublishUrl As String = _
                publishProperties.Item("PublishUrl").Value
            Dim originalInstallUrl As String = _
                publishProperties.Item("InstallUrl").Value
            Dim originalUpdateUrl As String = _
                publishProperties.Item("UpdateUrl").Value
            publishProperties.Item("PublishUrl").Value = _
                AppendStringToUrl(localeString, New Uri(originalPublishUrl))
            If originalInstallUrl <> String.Empty Then
                publishProperties.Item("InstallUrl").Value = _
                    AppendStringToUrl(localeString, New Uri(originalInstallUrl))
            End If
            If originalUpdateUrl <> String.Empty Then
                publishProperties.Item("UpdateUrl").Value = _
                    AppendStringToUrl(localeString, New Uri(originalUpdateUrl))
            End If
            proj.Save()
    
            Dim slnbld2 As SolutionBuild2 = _
                CType(DTE.Solution.SolutionBuild, SolutionBuild2)
            slnbld2.Clean(True)
    
            slnbld2.BuildProject( _
            proj.ConfigurationManager.ActiveConfiguration.ConfigurationName, _
            proj.UniqueName, True)
    
            ' Only publish if build is successful.
            If slnbld2.LastBuildInfo <> 0 Then
                MsgBox("Build failed for " & proj.UniqueName)
            Else
                slnbld2.PublishProject( _
                proj.ConfigurationManager.ActiveConfiguration.ConfigurationName, _
                proj.UniqueName, True)
                If slnbld2.LastPublishInfo = 0 Then
                    MsgBox("Publish succeeded for " & proj.UniqueName _
                    & vbCrLf & "." _
                    & " Publish Language was '" & localeString & "'.")
                Else
                    MsgBox("Publish failed for " & proj.UniqueName)
                End If
            End If
    
            ' Return URLs and target culture to their previous state.
            publishProperties.Item("PublishUrl").Value = originalPublishUrl
            publishProperties.Item("InstallUrl").Value = originalInstallUrl
            publishProperties.Item("UpdateUrl").Value = originalUpdateUrl
            publishProperties.Item("TargetCulture").Value = originalTargetCulture
            proj.Save()
        End Sub
    
        Private Function AppendStringToUrl(ByVal str As String, _
        ByVal baseUri As Uri) As String
            Dim returnValue As String = baseUri.OriginalString
            If baseUri.IsFile OrElse baseUri.IsUnc Then
                returnValue = IO.Path.Combine(baseUri.OriginalString, str)
            Else
                If Not baseUri.ToString.EndsWith("/") Then
                    returnValue = baseUri.OriginalString & "/" & str
                Else
                    returnValue = baseUri.OriginalString & str
                End If
            End If
            Return returnValue
        End Function
    End Module
    
  5. Cierre el IDE de macros. El foco volverá a Visual Studio.

Para publicar un proyecto para una configuración regional específica

  1. Para crear un proyecto de aplicación para Windows de Visual Basic, en el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione Aplicación para Windows en el nodo Visual Basic. Asigne al proyecto el nombre PublishLocales.

  3. Haga clic en Form1. En la ventana Propiedades, en Diseño, cambie la propiedad Language de (Predeterminado) a Inglés. Cambie la propiedad Text del formulario a MyForm.

    Observe que las DLL de recursos adaptados no se crean hasta que se necesiten. Por ejemplo, se crean al cambiar el texto del formulario o uno de sus controles después de haber especificado la nueva configuración regional.

  4. Publique PublishLocales mediante el IDE de Visual Studio.

    En el Explorador de soluciones, seleccione PublishLocales. En el menú Proyecto, seleccione Propiedades. En el Diseñador de proyectos, en la página Publicar, especifique una ubicación de publicación de https://localhost/PublishLocales y, a continuación, haga clic en Publicar ahora.

    Cuando aparezca la página Web de la publicación, ciérrela. (Para este paso, únicamente tiene que publicar el proyecto; no tiene que instalarlo.)

  5. Vuelva a publicar PublishLocales invocando la macro en la ventana del símbolo del sistema de Visual Studio. Para ver la ventana del símbolo del sistema, en el menú Ver, elija Otras ventanas y, a continuación, haga clic en Ventana Comandos o presione CTRL+ALT+A. En la ventana del símbolo del sistema, escriba macros; Autocompletar proporcionará una lista de macros disponibles. Seleccione la siguiente macro y presione ENTRAR:

    Macros.MyMacros.PublishSpecificCulture.PublishProjectFirstProjectWithEnLocale

  6. Si el proceso de publicación ha finalizado correctamente, se generará el mensaje "Publicación correcta de PublishLocales\PublishLocales.vbproj. El idioma de publicación es 'en'." Haga clic en Aceptar en el cuadro de mensaje. Si aparece la página Web de publicación, haga clic en Instalar.

  7. Busque en C:\Inetpub\wwwroot\PublishLocales\en. Debería ver los archivos instalados, por ejemplo los manifiestos, setup.exe y el archivo de página web de publicación, así como el archivo DLL de recursos adaptado. (De forma predeterminada ClickOnce lleva anexa una extensión .deploy en los archivos EXE y DLL; después de la implementación, puede quitar esta extensión.)

Vea también

Tareas

Cómo: Editar y crear macros mediante programación

Cómo: Publicar varios proyectos en un solución

Referencia

Explorador de macros (Ventana)

Otros recursos

Publicar aplicaciones ClickOnce

Entorno de desarrollo de macros