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.
Ação recomendada
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.
Ação recomendada
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
comofalse
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
Ação recomendada
Remova a configuração <DotNetCliToolReference>
do projeto.
Categoria
MSBuild
APIs afetadas
N/D