Q:

XSD.EXE Gerar classes no C# - EFD Reinf v1_04_00

Estou tentando gerar pelo XSD.exe as classes em C# a partir dos arquivos XSD da Reinf:

EFD Reinf v1_04_00
http://sped.rfb.gov.br/arquivo/show/2802

Da seguinte forma:
C:\Reinf\XSD>xsd evtInfoContribuinte-v1_04_00.xsd /classes

o XSD.exe retorna erro:
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.6.1055.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Schema validation warning: The 'http://www.w3.org/2000/09/xmldsig#:Signature' el
ement is not declared. Line 754, position 10.

Warning: Schema could not be validated. Class generation may fail or may produce
 incorrect results.

Error: Error generating classes for schema 'evtInfoContribuinte-v1_04_00'.
  - The element 'http://www.w3.org/2000/09/xmldsig#:Signature' is missing.

If you would like more help, please type "xsd /?".

C:\Reinf\XSD>xsd evtInfoContribuinte-v1_04_00.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.6.1055.0]
Copyright (C) Microsoft Corporation. All rights reserved.
Schema validation warning: The 'http://www.w3.org/2000/09/xmldsig#:Signature' el
ement is not declared. Line 754, position 10.

Warning: Schema could not be validated. Class generation may fail or may produce
 incorrect results.

Error: Error generating classes for schema 'evtInfoContribuinte-v1_04_00'.
  - The element 'http://www.w3.org/2000/09/xmldsig#:Signature' is missing.

Entendi que no XSD ele está dando erro aqui:
<xs:element ref="ds:Signature"/>

Removi esta linha e deu certo.
Minha dúvida: Seria esse o procedimento correto (remover)?
Uma vez que é o arquivo XSD disponibilizado pela Receita Federal.
As classes geradas não ficariam incompletas?

A:

Você poderia baixar o arquivo xmldsig-core-schema.xsd (você pode consegui-lo, por exemplo, baixando o Pacote de Comunicação do eSocial v1.5, na pasta \XSD\Eventos\RetornoEvento) e executar o comando dessa forma:
xsd.exe /classes evtInfoContribuinte-v1_04_00.xsd xmldsig-core-schema.xsd

Dessa forma não daria o erro, e a classe resultante seria criada com todos os componentes do elemento Signature.
Mas, eliminando a linha que faz referência ao ds:Signature, como você fez, não traz nenhum efeito colateral e na verdade é até melhor porque deixará a classe gerada menos poluída, e, na prática, esse elemento Signature nunca será usado no objeto, já que a assinatura deve ser gerada a partir do XML completo e já serializado.
Os arquivos XSD normalmente são mais usados para a validação dos arquivos XML, e, em se tratando de validação, esse elemento Signature é essencial, ele deve existir no XML final. Mas para criar as classes, que serão usadas depois para serialização, o Signature não faz falta porque nunca será usado.
Aproveitando, a forma como eu uso o comando xsd.exe é assim (quebrei em diversas linhas para ficar mais legível, mas é um comando só):
xsd /c /f /l:cs
    /u:http://www.reinf.esocial.gov.br/schemas/evtInfoContribuinte/v1_04_00
    /n:R1000
    evtInfoContribuinte-v1_04_00.xsd

/c é um apelido para /classes;
/f indica que serão criados campos (fields) ao invés de propriedades (properties);
/l:cs indica que a linguagem de saída será C#, mas esse já é o padrão;
/u:[uri] indica o URI do namespace do XSD que você está importando (lembrando que no caso do Reinf, cada evento terá um URI diferente);
/n:[namespace] indica o seu namespace na aplicação alvo.

EDIÇÃO
Dica: Coloque cada schema convertido em um namespace específico, porque todos eles têm o elemento raiz com o mesmo nome, Reinf, e quando você adicionar a classe do segundo schema já dará conflito, se não estiverem em namespaces separados. Você pode colocar essa primeira classe (extraída do schema evtInfoContribuinte-v1_04_00.xsd) no namespace R1000, usando a opção /n:R1000 na linha de comando, por exemplo:
namespace R1000 {
    using System.Xml.Serialization;

    public partial class Reinf {
        public ReinfEvtInfoContri evtInfoContri;
    }

    // [...]
}

Se converter o schema de comunicação retornoLoteEventos-v1_04_00.xsd, pode coloca-lo no namespace RetornoLoteEventos, usando a opção /n:RetornoLoteEventos na linha de comando, e assim por diante.

