anchor.diff:  
   link:{groovyDslPath}/org.gradle.ide.visualstudio.VisualStudioExtension.html[VisualStudioExtension] no longer has a `solutions` property. Instead, you configure a single solution via link:{groovyDslPath}/org.gradle.ide.visualstudio.VisualStudioRootExtension.html[VisualStudioRootExtension] in the root project, like so:
   
  +====
  +[.multi-language-sample]
  +=====
  +.build.gradle
  +[source, groovy]
   ----
   model {
       visualStudio {
  
positive.code: 
  The new, stable behavior can be switched on by adding the following to your settings file:
  
      enableFeaturePreview('STABLE_PUBLISHING')
  
  We recommend doing a test run with a local repository to see whether all artifacts still have the expected coordinates. In most cases everything should work as before and you are done. However, your publishing block may rely on the implicit deferred configuration, particularly if it relies on values that may change during the configuration phase of the build.
  
  For example, under the new behavior, the following logic assumes that `jar.baseName` doesn't change after `artifactId` is set:
  
  [source,groovy]
  ----
  subprojects {
      publishing {
  
negative.code:     }
  }
  ----
  =====
  [.multi-language-sample]
  =====
  .build.gradle.kts
  [source,kotlin]
  ----
  subprojects {
      publishing {
          publications {
              named<MavenPublication>("mavenJava") {
                  from(components["java"])
                  afterEvaluate {
                      artifactId = tasks.jar.get().baseName
                  }
              }
          }
      }
  }
  ----
  =====
  ====
  
  [[rel4.8:configure_internal_tasks]]
  === [4.8] Configure existing `wrapper` and `init` tasks
  
  You should no longer define your own `wrapper` and `init` tasks. Configure the existing tasks instead, for example by converting this:
  
  ====
  [.multi-language-sample]
  =====
  .build.gradle
  [source, groovy]
  ----
  task wrapper(type: Wrapper) {
      ...
  }
  ----
  =====
  [.multi-language-sample]
  =====
  .build.gradle.kts
  [source,kotlin]
  ----
  task<Wrapper>("wrapper") {
      ...
  }
  ----
  =====
  ====
  
  to this:
  
  ====
  [.multi-language-sample]
  =====
  .build.gradle
  [source, groovy]
  ----
  wrapper {
      ...
  }
  ----
  =====
  [.multi-language-sample]
  =====
  .build.gradle.kts
  [source,kotlin]
  ----
  tasks.wrapper {
      ...
  }
  ----
  =====
  ====
  
  [[rel4.8:pom_wildcard_exclusions]]
  === [4.8] Gradle now honors implicit wildcards in Maven POM exclusions
  