Compartilhar via


Alterações interruptivas do MSBuild no .NET Core 2.1 – 3.1

As seguintes alterações interruptivas estão documentadas nesta página:

Alteração interruptiva Versão introduzida
Builds de tempo de design retornam apenas referências de pacote de nível superior 3.1
Alteração do nome do arquivo de manifesto do recurso 3.0
As ferramentas de projeto agora estão incluídas no SDK 2.1

.NET Core 3.1

Builds de tempo de design retornam apenas referências de pacote de nível superior

Do SDK do .NET Core 3.1.400 em diante, somente as referências de pacote de nível superior são retornadas pelo destino RunResolvePackageDependencies.

Versão introduzida

SDK do .NET Core 3.1.400

Descrição das alterações

Em versões anteriores do SDK do .NET Core, o destino RunResolvePackageDependencies criava os seguintes itens do MSBuild que continham informações do arquivo de ativos NuGet:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Esses dados eram usados pelo Visual Studio para popular o nó Dependências no Gerenciador de Soluções. Mas isso pode representar uma grande quantidade de dados que não serão necessários, a menos que o nó Dependências seja expandido.

Do SDK do .NET Core versão 3.1.400 em diante, a maioria desses itens não é gerada por padrão. Somente itens do tipo Package são retornados. Se o Visual Studio precisar dos itens para popular o nó Dependências, ele lerá as informações diretamente do arquivo de ativos.

Motivo da alteração

Essa alteração foi introduzida para aprimorar o desempenho do carregamento de solução dentro do Visual Studio. Antes, todas as referências de pacote eram carregadas, o que envolvia o carregamento de muitas referências que a maioria dos usuários nunca visualizava.

Se você tiver uma lógica do MSBuild que dependa da criação desses itens, defina a propriedade EmitLegacyAssetsFileItems como true no arquivo de projeto. Essa configuração habilita o comportamento anterior em que todos os itens eram criados.

Categoria

MSBuild

APIs afetadas

N/D


.NET Core 3.0

Alteração do nome do arquivo de manifesto do recurso

Do .NET Core 3.0 em diante, no caso padrão, o MSBuild gera um nome de arquivo de manifesto diferente para arquivos de recursos.

Versão introduzida

3.0

Descrição das alterações

Antes do .NET Core 3.0, se o metadado LogicalName, ManifestResourceName ou DependentUpon não fosse especificado para um item EmbeddedResource no arquivo de projeto, o MSBuild gerava um nome de arquivo de manifesto no padrão <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Se RootNamespace não estava definido no arquivo de projeto, ele era assumido como o nome do projeto. Por exemplo, o nome do manifesto gerado para um arquivo de recurso chamado Form1.resx no diretório raiz do projeto era MyProject.Form1.resources.

Do .NET Core 3.0 em diante, se um arquivo de recurso estiver no mesmo local que um arquivo de origem com o mesmo nome (por exemplo, Form1.resx e Form1.cs), o MSBuild usará as informações de tipo do arquivo de origem para gerar o nome do arquivo de manifesto no padrão <Namespace>.<ClassName>.resources. O namespace e o nome de classe são extraídos do primeiro tipo no arquivo de origem no mesmo local. Por exemplo, o nome do manifesto gerado para um arquivo de recurso chamado Form1.resx que está no mesmo local que um arquivo de origem chamado Form1.cs é MyNamespace.Form1.resources. É importante observar que a primeira parte do nome do arquivo é diferente das versões anteriores do .NET Core (MyNamespace em vez de MyProject).

Observação

Se o metadado LogicalName, ManifestResourceName ou DependentUpon estiver especificado em um item EmbeddedResource no arquivo de projeto, essa alteração não afetará esse arquivo de recurso.

Essa alteração interruptiva foi introduzida com a adição da propriedade EmbeddedResourceUseDependentUponConvention aos projetos do .NET Core. Por padrão, os arquivos de recursos não são listados explicitamente em um arquivo de projeto do .NET Core, portanto, eles não têm metadados DependentUpon para especificar como nomear o arquivo .resources gerado. Quando EmbeddedResourceUseDependentUponConvention é definido como true, que é o padrão, o MSBuild procura um arquivo de origem no mesmo local e extrai um namespace e um nome de classe desse arquivo. Se você definir EmbeddedResourceUseDependentUponConvention como false, o MSBuild vai gerar o nome do manifesto de acordo com o comportamento anterior, que combina RootNamespace e o caminho do arquivo relativo.

Na maioria dos casos, nenhuma ação é necessária por parte do desenvolvedor e o aplicativo deve continuar funcionando. Mas se essa alteração interromper o aplicativo, você poderá:

  • Alterar o código para esperar o novo nome do manifesto.

  • Recusar a nova convenção de nomenclatura definindo EmbeddedResourceUseDependentUponConvention como false no arquivo de projeto.

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

Categoria

MSBuild

APIs afetadas

N/D


.NET Core 2.1

As ferramentas de projeto agora estão incluídas no SDK

O SDK do .NET Core 2.1 agora inclui ferramentas comuns da CLI e você não precisa mais fazer referência a essas ferramentas do projeto.

Descrição das alterações

No .NET Core 2.0, os projetos fazem referência a ferramentas externas do .NET com a configuração de projeto <DotNetCliToolReference>. No .NET Core 2.1, algumas dessas ferramentas são incluídas no SDK do .NET Core e a configuração não é mais necessária. Se você incluir referências a essas ferramentas no projeto, receberá um erro semelhante ao seguinte: A ferramenta 'Microsoft.EntityFrameworkCore.Tools.DotNet' agora está incluída no SDK do .NET Core.

Ferramentas agora incluídas no SDK do .NET Core 2.1:

<DotNetCliToolReference> value Ferramenta
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Versão introduzida

SDK do .NET Core 2.1.300

Remova a configuração <DotNetCliToolReference> do projeto.

Categoria

MSBuild

APIs afetadas

N/D