como alterar o namespace de todo o projeto?


104

Estou modificando o aplicativo de demonstração deste artigo: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Preciso atualizar todos os arquivos para usar meu namespace, por exemplo, agora o arquivo localizado aqui:

MySolution\MyApp\DemoApp\ViewModel\MainWindowViewModel.cs

está usando esse namespace:

namespace DemoApp.ViewModel
{
/// <summary>
/// The ViewModel for the application's main window.
/// </summary>
public class MainWindowViewModel : WorkspaceViewModel

Preciso mover o arquivo aqui (remova a pasta DemoApp):

MySolution\MyApp\ViewModel\MainWindowViewModel.cs

e também para usar o namespace certo:

namespace MyApp.ViewModel
{
....

como fazer isso no Visual Studio 2010?

Atualizar ok aqui é possível duplicar Alterar namespace do projeto no Visual Studio Agora eu sei como alterar o namespace do projeto, mas como mover arquivos no sistema de arquivos? (livrar-se da pasta "DemoApp")


4
Assim como um FYI, você não precisa necessariamente dos namespaces para corresponder à estrutura de pastas no .NET, não é obrigatório.
James Michael Hare

1
Como o James disse, não é obrigatório ... mas eu questionaria por que alguém não "terminou o trabalho" em um aplicativo que eu precisava trabalhar.
NotMe

1
Com relação à movimentação de arquivos .. Hum, cortar / colar e arrastar / soltar geralmente funciona dentro do gerenciador de soluções do Visual Studio .. ou mesmo apenas renomear a pasta ou excluir. dependendo do que você realmente está tentando fazer.
NotMe

Respostas:


124

Eu imagino que um simples Replace in Files ( Ctrl+ Shift+ H) irá resolver o problema; simplesmente substitua namespace DemoApppor namespace MyApp. Depois disso, construa a solução e procure erros de compilação para identificadores desconhecidos. Qualquer item que seja totalmente qualificado DemoAppprecisará ser alterado para MyApp.


62
Importante; mude o namespace padrão nas propriedades do projeto também; isso controla o namespace para coisas como resx
Marc Gravell

Eu tenho alguns arquivos XAML que representam janelas WPF, então isso não funcionará para mim.
Pieter

6
Você também deve executar um Replace em quaisquer usinginstruções para alterar de using DemoApppara using Myapp.
swbandit

5
também renomeie <add namespace = "OldNameSpace" /> em todos os arquivos web.config na pasta de visualizações
neo112

@Pieter Você deve ser capaz de substituir tudo para o aplicativo inteiro, seguido por uma atualização nas propriedades como Marc sugere, então feche a solução e abra-a novamente, caso contrário o VS tem um comportamento inexplicável com algum preenchimento automático.
Eric

153

Vá para algum lugar em que o namespace esteja declarado em um de seus arquivos. Coloque o cursor na parte do namespace que você deseja alterar e pressione F2. Isso deve renomear o namespace em cada arquivo. Pelo menos funcionou no meu pequeno projeto de demonstração que criei para testar esta resposta!

Dependendo da versão do VS, o atalho também pode ser Ctrl- R, Ctrl- R.


1
por algum motivo não funciona para mim. Eu pressiono F2 e nada acontece.
javapowered

6
@javapowered, então sua tecla de atalho foi personalizada. Procure nas opções do VS para o seu. Hoje o meu é CTRL-R CTRL-R.
Amy

4
Observação: embora eu ainda prefira esse método, ele [compreensivelmente] falhou ao substituir as referências nas visualizações e no arquivo web.config contido no diretório Views /. Apenas observe para aqueles.
Wiseguy

3
Para uma versão que não deve depender de alterações nas teclas de atalho, apenas clique com o botão direito no nome do namespace e escolha renomear.
Kat

3
Infelizmente, isso não funciona se você quiser que o novo nome inclua um .personagem.
Botond Balázs de


3

Ctrl+Shift + Hnão é a solução real.

Você pode usar o Resharper para alterar todas as definições de namespace em sua solução. Esta é a melhor maneira que experimentei antes.

https://www.jetbrains.com/resharper/features/code_refactoring.html


2
redefinir requer uma máquina desktop cara totalmente desenvolvida
Ivan G.

@IvanG. bem, muitos projetos comerciais exigem desenvolvedores totalmente caros também, então uma máquina e uma licença R # não são muito caras no esquema geral das coisas;) Se você precisar verificar se este método (ou de Adam ou Amy) funcionou corretamente , você pode consultar Encontrar problemas de código
StuartLC

1
@StuartLC, infelizmente, os dias de um local de trabalho dedicado e um grande desktop acabaram, eu uso um laptop realmente poderoso para o meu desenvolvimento e a reformulação praticamente o mata, então não recomendo para quem valoriza o tempo.
Ivan G.

Pessoal, vocês podem usar para renomear gratuitamente, vocês sabem :-) Instale, ative a versão de avaliação gratuita, renomeie e desinstale se quiser ;-)
Selçuk Ermaya

1

Eu examinei a estrutura de pastas com uma ferramenta chamada BareGrep para garantir que todas as alterações de namespace foram feitas. É uma ferramenta gratuita que permitirá a você pesquisar os arquivos em uma estrutura de arquivos especificada.


arquivo corresponde ao REGEX: (.exe) | (.dll) | (.cache) | (.pdb) e então inverta a correspondência . repita este padrão para excluir outros binários etc.
twobob de


1

Você pode usar o ReSharper para refatoração de namespace. Isso dará 30 dias de teste gratuito. Ele mudará o namesapce de acordo com a estrutura da pasta.

Passos:

1) Clique com o botão direito no projeto / pasta / arquivos que deseja refatorar.

2) Se você instalou o ReSharper, obterá uma opção Refactor-> Ajustar Namespaces .... Clique aqui.

insira a descrição da imagem aqui

Isso mudará automaticamente os namespaces de todos os arquivos selecionados.


Obrigado .. Eu fui capaz de fazer isso.
sgowd

0

Tentei de tudo, mas encontrei uma solução que realmente funciona. Ele cria uma solução independente com um novo nome de namespace e assim por diante.

  1. No formulário principal, localize o nome do namespace -> clique com o botão direito -> Refatorar -> Renomear e selecione um novo nome. Marque todas as caixas e clique em OK.

  2. No explorador de soluções, renomeie o nome da solução para um novo nome.

  3. No explorador de soluções, renomeie o nome do projeto com um novo nome.

  4. Feche o VS e renomeie a pasta (no total commander, por exemplo) na pasta da solução com um novo nome.

  5. No arquivo .sln, renomeie o nome antigo para um novo nome.

  6. Exclua arquivos .suo antigos (oculto)

  7. Inicie o VS e carregue o projeto

  8. Projeto -> propriedades -> altere o nome do Assembly e o namespace padrão para um novo nome.


0

Eu sei que é muito tarde, mas para quem quer fazer isso de agora em diante, espero que esta resposta ajude. Se você tiver CodeRush Express( versão gratuita e 'obrigatório') instalado, ele oferece uma maneira simples de alterar o namespace de um projeto. Basta colocar o cursor no namespace que deseja alterar e ele deve exibir uma smart tag(uma pequena caixa azul) abaixo da namespacestring. Você pode clicar nessa caixa ou pressionar as Ctrl +teclas para ver a Renameopção. Selecione-o e digite o novo nome para o namespace amplo do projeto, clique Applye selecione quais lugares em seu projeto você deseja alterar, na nova caixa de diálogo e OKnela. Feito! :-)


Na minha experiência, CodeRush Express não é um 'must have' (opinião pessoal). É útil para coisas como esta.
Maarten

0

Quando quis alterar o namespace e o nome da solução, fiz o seguinte:
1) alterei o namespace selecionando-o e renomeei-o e fiz o mesmo com o nome da solução
2) cliquei na lâmpada e renomeei todas as instâncias do antigo namespace
3 ) removeu todos os projetos da solução
4) fechou o visual studio
5) renomeou todos os projetos no windows explorer
6) abriu o visual studio e adicionou todos os projetos novamente
7) renomeou namespaces em todos os projetos em suas propriedades
8) removeu a pasta bin ( de todos os projetos)
9) construir o projeto novamente

Isso funcionou para mim sem problemas e meu projeto também tinha controle de origem. Tudo estava bem depois de enviar essas alterações para o controle remoto.

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.