Maneira correta de renomear solução (e diretórios) no Visual Studio


415

Eu tenho uma solução do Visual Studio bastante envolvida (2010, mas não deve importar) que preciso renomear.

Quero renomear as pastas para corresponder ao novo nome da solução, mas não consigo descobrir uma maneira de refatorar os nomes das pastas automaticamente, e passar por cada arquivo de projeto será doloroso.

Existe uma maneira oficial de fazer isso? Como alternativa (e muito menos preferencialmente), existem ferramentas gratuitas para fazer isso?



13
Como isso é uma duplicata? Ele está pedindo uma renomeação de uma solução, não de um projeto!
Viking

Respostas:


375

Editar manualmente o arquivo .sln

Esse método visa inteiramente renomear o diretório do projeto, conforme exibido no Windows Explorer.

Esse método não apresenta problemas no método Remover / adicionar arquivo de projeto abaixo (as referências desaparecem), mas pode resultar em problemas se o seu projeto estiver sob controle de origem (consulte as notas abaixo). É por isso que a etapa 2 (backup) é tão importante.

  1. Feche o Visual Studio.
  2. Crie um backup do seu arquivo .sln (você sempre pode reverter).
  3. Imagine que você deseja renomear o diretório Project1para Project2.
  4. Se não estiver usando o controle de origem, renomeie a pasta de Project1para o Project2Windows Explorer.
  5. Se estiver usando o controle de origem, renomeie a pasta de Project1para Project2usando as funções fornecidas pelo controle de origem. Isso preserva o histórico do arquivo. Por exemplo, com TortoiseSVN, clique com o botão direito do mouse no arquivo, selecione TortoiseSVN .. Rename.
  6. No arquivo .sln, edite todas as instâncias de Project1estar Project2, usando um editor de texto como o Bloco de notas .
  7. Reinicie o Visual Studio e tudo funcionará como antes, mas com o projeto em um diretório diferente.

Você também pode ver a renomeação da solução manualmente ou postar, que descreve este processo manual .

Vantagens

  • Você pode fazer o diretório no Windows Explorer corresponder ao nome do projeto na solução.
  • Este método não remove nenhuma referência de outros projetos para esse arquivo (uma vantagem sobre o método Remover / adicionar arquivo de projeto , veja minha outra resposta abaixo).

Advertências

  • É importante fazer backup de tudo em um arquivo .zip antes de renomear qualquer coisa, pois esse método pode criar problemas com o controle de origem.
  • Se o seu projeto estiver sob controle de origem, ele poderá criar problemas se você renomear arquivos ou diretórios fora do controle de origem (usando o Windows Explorer). É preferível renomear o arquivo usando a própria estrutura de controle de origem , se você puder, para preservar o histórico desse arquivo (confira o menu de contexto com um clique direito - ele pode ter uma função para renomear o arquivo).

Atualização 2014-11-02

O ReSharper adicionou um método automatizado para obter o mesmo resultado que o método manual acima. Se o espaço para nome estiver sublinhado com uma linha azul ondulada, clique no ícone da pirâmide de ação para:

  • Renomeie o espaço para nome para corresponder ao nome do diretório no Windows Explorer ou;
  • Renomeie o diretório no Windows Explorer para corresponder ao espaço para nome.

No segundo caso, a palavra final define o novo nome de diretório no Windows Explorer; por exemplo, se alterássemos o espaço para nome ViewModel2, seria oferecido mover o arquivo para a pasta ViewModel2.

No entanto, isso não necessariamente atualizará os arquivos no controle de origem, portanto, talvez você ainda precise usar o método manual.

insira a descrição da imagem aqui

Atualização 2018-01-31

Testado com o Visual Studio 2008, 2010, 2012, 2013, 2015, 2017, atualização 1, 2, 3, 4, 5.

Atualização 2020-05-02

Testado com o Visual Studio 2019.


2
Nota: mesmo com VS2012 é necessário reiniciar porque caso contrário ele pode ficar confuso e você receber erros estúpidos
Simon_Weaver

1
"Se você tiver controle de origem, perderá o histórico do arquivo", isso é uma grande desvantagem para nós (auditoria etc.). Existem rotas sugeridas enquanto mantemos o histórico?
dougajmcdonald

23
O Visual Studio é um programa tão poderoso, mas esse recurso não está incluído? uau ..
Luca Steeb

2
Mesmo depois de seguir a solução descrita pelo @Contango, eu ainda estava recebendo um erro: O atributo OwinStartup descoberto no assembly ... inicializa um novo nome que entra em conflito com o nome antigo. Examinei as pastas obj e bin e excluí qualquer arquivo com o nome antigo, deixando tudo intacto. Reiniciei vs com o meu projeto recém-nomeado e funcionou como um encanto! Obrigado!
nocturns2

2
@LucaSteeb Yup, supostamente 2012 foi de cerca de 50 milhões de linhas de código. #monolithic
Chiramisu

158

Aqui estão as etapas que você precisa seguir para renomear uma solução:

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto, selecione Renomear e insira um novo nome.
  2. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Propriedades. Na guia Aplicativo, altere "Nome do assembly" e "Espaço para nome padrão".
  3. No arquivo cs principal (ou em qualquer outro arquivo de código), renomeie a declaração do espaço para nome para usar o novo nome. Para isso, clique com o botão direito do mouse no espaço para nome e selecione Refatorar> Renomear, insira um novo nome. Por exemplo: namespace WindowsFormsApplication1
  4. Altere o AssemblyTitle e AssemblyProduct em Properties / AssemblyInfo.cs.

    [assembly: AssemblyTitle("New Name Here")]
    [assembly: AssemblyDescription("")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("New Name Here")]
    [assembly: AssemblyCopyright("Copyright ©  2013")]
    [assembly: AssemblyTrademark("")]
    [assembly: AssemblyCulture("")]
    
  5. Exclua os diretórios bin e obj fisicamente.

  6. Renomeie o diretório da pasta física do projeto.

  7. Abra o arquivo SLN (no bloco de notas ou em qualquer editor) e altere o caminho para o projeto.

  8. Limpe e reconstrua o projeto.


1
Funciona perfeitamente! Mas você precisa gerenciar o seu Datasetmanualmente (se tiver anexado ao seu projeto).
Sujith HS

2
Trabalho! Eu também tive que renomear os arquivos .sln e .suo. E eu achei etapa 4 já foi realizada por um dos passos anteriores no meu VS 2010
Patches

3
Estou um pouco confuso sobre se você está ou não se referindo à Solução ou ao Projeto na etapa 1. Quero renomear os dois, cada um com um nome diferente. Qual seria o novo espaço para nome, o novo nome da solução ou o nome do projeto? Obrigado por esclarecer isso para mim.
Alan Fisher

1
Isso funcionou para mim também (usando o VS2013), mas perdeu os caminhos do projeto no \Packages\repositories.configarquivo.
Ted

1
Antes de tentar reabrir a solução, usei uma ferramenta de pesquisa, Agent Ransack, para pesquisar todos os arquivos e pastas por qualquer referência ao nome da solução / projeto anterior e corrigi-los. Havia vários lugares que eu precisava fazer isso.
Andy G

31

As operações Renomear no visual studio alteram apenas o nome do arquivo, ou seja, para um projeto, * .prj e para uma solução * .sln. Você precisará renomear pastas separadamente usando o sistema de arquivos e remover e ler os projetos, pois eles terão novos nomes de pasta. No entanto, observe que os arquivos de solução e projeto são respectivamente arquivos texst e xml. Você pode escrever seu próprio programa que os analisa e renomeia os nomes de pastas, nomes de arquivos e corrige os arquivos de projeto / solução internamente.


1
Existem ferramentas gratuitas disponíveis que já fazem isso? Não consegui encontrar nada.
David Pfeffer

5
A única coisa que pode ajudá-lo é CoolCommands 4.0 "Adicionar Projetos De Pasta", de modo que depois de ter removido / renomeado as pastas de projeto, você pode adicioná-los todos de volta ao mesmo tempo: sharptoolbox.com/tools/coolcommands
AaronLS

1
o texto sublime 2 possui pesquisa regex e substitui funcionalidades que facilitam lidar com isso.
jfyelle

22

Você também pode exportar o modelo e, em seguida, criar um novo projeto a partir do modelo exportado, alterando o nome como preferir


1
Isso funcionou para mim também. Eu tive que fazer um ajuste, no entanto. Eu estava usando a estrutura de entidade em um aplicativo Web e ele deixou os arquivos .dll antigos com o nome original do projeto, então tive que descobrir por que estava recebendo algum tipo de erro duplicado para as classes da tabela. Depois que os removi do projeto, funcionou bem. Espero que isso ajude. E obrigado, Edoardo!
21417 Steve

2
Esta é absolutamente a melhor maneira de fazer isso, consulte msdn.microsoft.com/en-us/library/… para ver para onde mover o modelo exportado para encontrá-lo na caixa de diálogo "Novo projeto".
Ares Ou

13

Abaixo está uma maneira passo a passo de renomear toda a sua solução no Visual Studio 2013

Supondo que estamos alterando um projeto chamado "HelloWorld.ui" para "Section1to5.ui"

  1. Vá para o Solution Explorer (captura de tela abaixo), clique com o botão direito do mouse no projeto que deseja renomear e selecione "Renomear". Digite o novo nome que você deseja.

Captura de tela do Solution Explorer

  1. Clique com o botão direito do mouse no projeto que você acabou de renomear e clique em "Propriedades". Na guia Aplicativo, altere o "Nome do assembly" e "Espaço para nome padrão".

  2. No arquivo principal Program.cs (ou em qualquer outro arquivo de código que você tenha criado), renomeie a declaração do espaço para nome para usar o novo nome. Para isso, clique com o botão direito do mouse no espaço para nome e selecione Refatorar> Renomear, insira um novo nome. Por exemplo:

    espaço para nome HelloWorld.ui ----> espaço para nome Section1to5.ui

  3. Em seguida, expanda as "Propriedades" e clique duas vezes no arquivo AssemblyInfo.cs. Você observará o fragmento de código abaixo:

[assembly: AssemblyTitle("HelloWorld.ui")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("HelloWorld.ui")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Você precisa alterar o AssemblyTitle e AssemblyProduct em Properties / AssemblyInfo.cs para o novo nome, neste exemplo de "HelloWorld.ui" para "Section1to5.ui". Quando terminar de alterar o nome, salve e feche o Visual Studio.

  1. No diretório do projeto, entre na pasta "HelloWorld.ui" e exclua os diretórios "bin" e "obj".

  2. Quando terminar, renomeie a pasta "HelloWorld.ui" para o novo nome do projeto.

  3. Abra o arquivo de soluções renomeadas com um editor de texto como o Bloco de Notas ou o Bloco de Notas ++ e edite a seguinte linha:

    Projeto ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.ui", "HelloWorld.ui \ HelloWorld.ui.csproj", "{39FC65A3-3AE7-4EC9-B8F7-74F971636C70}"

Substitua todas as instâncias de "HelloWorld.ui" pelo novo nome que você selecionou para o seu projeto, neste caso "Section1to5.ui". Isso altera o caminho do projeto para o diretório renomeado na etapa 6.

  1. Abra o arquivo de soluções com o visual studio, limpe e reconstrua o projeto.

  2. Você pode perceber que o botão "Debug / Run" foi substituído pelo botão "Attach". Se isso acontecer, basta clicar com o botão direito do mouse no projeto e escolher a opção "Definir como projeto de inicialização". Como alternativa, clique em Ferramentas> Personalizar> Comandos> Adicionar comando> Depurar e adicione o botão.

Você terminou de renomear o projeto, se tiver alguma dúvida, fique à vontade para postar e ficarei feliz em ajudar!


6

Exclua as subpastas bin e obj para remover uma carga de referência incorreta e use o windows para procurar o nome antigo.

Edite qualquer código ou arquivo xml encontrado e reconstrua. Agora, tudo bem.




4

Eu tentei o Visual Studio Project Renamer, mas ele lançou exceções nos poucos casos em que tentei.

Eu tive um bom sucesso com o CopyWiz .

Eu não sou de forma alguma afiliado a eles e ainda não paguei por isso, mas talvez seja necessário em breve, pois é a única ferramenta que parece funcionar nos meus projetos C # e C ++. Espero que eles ganhem um pouco de dinheiro e continuem a melhorá-lo.


4

Remover / adicionar método de arquivo do projeto

Esse método visa inteiramente renomear o diretório do projeto, conforme exibido no Windows Explorer.

  1. Faça backup de todo o seu projeto usando algo como GIT, SVN ou WinZip (importante!).
  2. Dentro da solução no Visual Studio, remova o projeto.
  3. Renomeie o diretório no Windows Explorer.
  4. Adicione o projeto novamente no Visual Studio.

Vantagens

  • Você pode fazer o diretório no Windows Explorer corresponder ao nome do projeto na solução.

Desvantagens

  • Se você remover uma biblioteca, ela removerá quaisquer referências à referida biblioteca de outros projetos. A solução pode não ser compilada depois disso, até você adicionar novamente as referências à referida biblioteca (isso é bastante fácil). Essa é a razão pela qual a etapa 1 (backup) é tão importante.
  • Se você tiver controle de origem, perderá o histórico do arquivo.

Clicar com o botão direito do mouse em um projeto e selecionar "Abrir Pasta no Windows Explorer" é útil para acompanhar onde o projeto está armazenado enquanto você executa esse processo.


4
WinZip ??? Espero que você esteja usando o controle de origem real e não faça backups de arquivos zip do seu código. Se você ou qualquer outra pessoa que estiver lendo isso, verifique try.github.io e experimente um projeto de teste. Você não vai voltar!
Matt Klein

2
Eu li o seu comentário Senhor @MattKlein e você estava certo: D Obrigado!
Jeancarlo Fontalvo

@Matt Klein Concordo totalmente, atualizado para recomendar o GIT ou o SVN também.
Contango

3

Você pode:

  1. clique em arquivo-> novo -> criar projeto a partir do projeto existente

  2. selecione seu arquivo original, por exemplo. solução 1 e insira a nova solução de nome de arquivo 2

  3. altere o nome do projeto na nova solução 2


Eu gosto bastante dessa abordagem, que é rejeitada por um motivo específico?
Coops

bloqueado minha máquina perto do fim - no Visual Studio 2017
klewis 22/03/19

3

Se você tiver problemas ao carregar projetos compartilhados, como o Xamarin, lembre-se de alterar a referência às bibliotecas compartilhadas nos arquivos csproj. Desenvolvi um jogo CocosSharp e os projetos Droid / iOS / WP81 não queriam carregar. Eu tive que mudar abaixo da linha em todos os arquivos csproj (Driod / iOS / WP81) que faziam referência à lib compartilhada. Isso foi causado por causa da alteração dos nomes das pastas; portanto, substitua YOUR_PREVIOUS_NAMESPACE pelos novos nomes de pastas.

<Import Project="..\YOUR_PREVIOUS_NAMESPACE.Shared\EmptyProject.Shared.projitems" Label="Shared" />

Também notei que, para projetos .Driod, o nome do assembly nas propriedades do projeto não pode ser alterado usando o visual studio (uso 2015). Eu tive que mudar o nome do assembly manualmente no arquivo .Droid.csproj.

<AssemblyName>YourNameSpace</AssemblyName>

Então eu carreguei solução e nas propriedades do projeto ver novo nome apareceu. Após a reconstrução dll com esse nome foi gerado.


2

Se você estiver criando um site no Visual Studio 2010. Você pode alterar o nome do projeto da seguinte maneira.

Etapa 1: no Visual Studio 2010, o arquivo SLN será armazenado na pasta do projeto no Visual studio 2010 e os arquivos de origem na pasta Website no Visual Studio 2010.

Etapa 2: renomeie a pasta clicando com o botão direito na pasta para a frente em Rename, que contém seu projeto SLN.

Etapa 3: renomeie o nome do arquivo SLN clicando com o botão direito do mouse no arquivo SLN para frente por Rename.

Etapa 4: renomeie a pasta que contém a origem desse arquivo SLN em site no Visual Studio 2010.

Etapa 5: Finalmente, clique duas vezes no arquivo SLN e altere a raiz da pasta de origem do SLN.


2

A única solução que funciona para mim no Visual Studio 2013 em um projeto WEB:

Digamos que eu queira renomear "projeto1" para "projeto2". Digamos que o caminho físico para o meu arquivo .sln seja: c: \ my \ path \ project1 \ project1.sln

portanto, o caminho para o meu arquivo .csproj, assim como as pastas bin e obj deve ser: c: \ my \ path \ project1 \ project1 \

  1. Abra a solução no VS clicando duas vezes no arquivo project1.sln.

  2. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto (NÃO na solução !!!), selecione Renomear e insira um novo nome.

  3. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Propriedades. Na guia Aplicativo, altere "Nome do assembly" e "Espaço para nome padrão".

  4. No arquivo CS principal (ou em qualquer outro arquivo de código como Global.asax, por exemplo), renomeie a declaração do espaço para nome para usar o novo nome. Para isso, clique com o botão direito do mouse no espaço para nome e selecione Refatorar> Renomear, insira um novo nome. Por exemplo:

espaço para nome project1

4.1 No Gerenciador de Soluções, clique com o botão direito do mouse no projeto (NÃO na solução !!!), selecione Renomear e digite um novo nome.

  1. Verifique se: AssemblyTitle e AssemblyProduct em Properties / AssemblyInfo.cs estão definidos com o novo nome ("projeto2").

1 [assembly: AssemblyTitle ("Novo Nome Aqui")] 2 [assembly: AssemblyDescription ("")] 3 [assembly: AssemblyConfiguration ("")] 4] [assembly: AssemblyCompany ("")] 5 [assembly: AssemblyProduct (" Novo nome aqui ")] 6 [montagem: AssemblyCopyright (" Copyright © 2013 ")] 7 [montagem: AssemblyTrademark (" ")] 8 [montagem: AssemblyCulture (" ")]

  1. Feche o Visual Studio.

  2. Exclua os diretórios bin e obj fisicamente.

  3. Renomeie a pasta pai e a pasta de origem para o novo nome (projeto2):

No exemplo: c: \ my \ path \ project1 \ project1

será: c: \ meu \ caminho \ projeto2 \ projeto2

  1. Renomeie o nome do arquivo SLN clicando com o botão direito do mouse no arquivo SLN para frente por Renomear.

  2. Finalmente abra o arquivo SLN (no bloco de notas ou em qualquer editor) e copie e substitua (Ctrl + h) qualquer nome antigo pelo novo nome.

  3. Abra o VS e clique em BUILD -> Clean Solution

  4. clique em Compilar -> Compilar solução e depois em F5 para executar ...

  5. Nota1: Se você obtiver algo parecido com isto: Erro de compilação CS0246: Não foi possível encontrar o tipo ou nome do espaço para nome 'project2' (está faltando uma diretiva de uso ou uma referência de montagem?)

Arquivo de origem: c: \ Users \ Nome de usuário \ AppData \ Local \ Temp \ Arquivos ASP.NET temporários \ root \ 78dd917f \ d0836ce4 \ App_Web_index.cshtml.a8d08dba.b0mwjmih.0.cs

Em seguida, vá para a pasta "Arquivos ASP.NET temporários" e exclua tudo.

  1. Nota2: Se você estiver tentando "salvar como" em um novo projeto nomeado e também manter o antigo, considere duplicar seu db modificando o connectionStrings no web.config e também reiniciando as migrações, se houver um no diretório projeto.

2

Eu sou novo no VS. Eu apenas tive o mesmo problema: necessário renomear um projeto iniciado após algumas semanas de trabalho. Isto o que eu fiz e funcionou.

  1. Apenas por precaução, faça um backup da sua pasta Project, embora você não a toque, mas apenas por precaução!
  2. Crie um novo projeto e salve-o usando o nome que você deseja para o seu 'novo' projeto, significando o nome para o qual você deseja alterar o seu projeto 'antigo'.
  3. Construa. Depois disso, você terá um projeto com o nome que deseja, mas que não abre nada além de abrir uma janela (um Windows Form App no ​​meu caso).
  4. Com o novo projeto aberto, clique em Projeto-> Adicionar Item Existente e, usando o Windows Explorer, localize sua pasta 'antiga' Projeto e selecione todos os arquivos em ... Visual Studio xxx \ Projects \ oldApp \ oldApp
  5. Selecione todos os arquivos lá (.vb, .resx) e adicione-os ao seu 'novo' projeto (o que já deve estar aberto).
  6. A última etapa seria abrir o arquivo do projeto usando o Solution
    Explorer e, na 1ª guia, altere o formulário de inicialização padrão para o formato que deveria ser.
  7. Reconstrua tudo.

Talvez mais etapas, mas menos ou nenhuma digitação, apenas alguns cliques do mouse. Espero que ajude :)




Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.