visual studio ordenar online indentar codigo code c# visual-studio resharper autoformatting

studio - ordenar codigo c# online



código de autoformato desde la línea de comando (4)

¿Es posible ejecutar código de formato automático para todos o para un archivo específico en la solución, como (Ctrl + K, Ctrl + D) formateando en Visual Studio pero desde la línea de comandos? ¿O usar la limpieza de Resharper también desde la línea de comandos para los archivos de soluciones?


Use CodeFormatter del equipo .NET

  1. Instalar MSBuild Tools 2015 .
  2. Descargar CodeFormatter 1.0.0-alpha6 .
  3. Agregue CodeFormatter.csproj al directorio raíz de sus proyectos:

CodeFormatter.csproj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Compile Include="**/*.cs" /> </ItemGroup> <Target Name="Compile"> <Csc Sources="@(Compile)"/> </Target> </Project>

A continuación, ejecute esto desde la línea de comandos.

> codeformatter.exe CodeFormatter.csproj /nocopyright

El resultado: todos los archivos C # de sus proyectos ahora se adhieren a la mayoría de las pautas de codificación de .NET Foundation.

Observaciones

  • Instalar MSBuild Tools 2015 significa que no necesitamos Visual Studio.
  • Agregar CodeFormatter.csproj al directorio raíz recursivamente incluye todos los archivos C #, lo que significa que lo anterior funciona con las configuraciones basadas en project.json y * .xproj.

Ver también

http://bigfontblog.azurewebsites.net/autoformat/


Como seguimiento a la publicación de Dilshod, si solo está buscando formatear un solo archivo, aquí hay una manera de hacerlo que no necesitará una ruta temporal:

static void FormatFile(string file) { EnvDTE.Solution soln = System.Activator.CreateInstance( Type.GetTypeFromProgID("VisualStudio.Solution.10.0")) as EnvDTE.Solution; soln.DTE.ItemOperations.OpenFile(file); TextSelection selection = soln.DTE.ActiveDocument.Selection as TextSelection; selection.SelectAll(); selection.SmartFormat(); soln.DTE.ActiveDocument.Save(); }

Tenga en cuenta que "archivo" tendrá que tener la ruta completa en el disco con toda probabilidad. Los caminos relativos no parecen funcionar (aunque no lo intenté tanto).



Crea tu propia herramienta. Puede usar EnvDTE , EnvDTE80 para crear un proyecto de Visual Studio y cargar los archivos que desea formatear sobre la marcha. Una vez que hayas terminado de borrar el proyecto de Visual Studio. Puede especificar que no se muestre la ventana de Visual Studio durante el formateo. Si está interesado, avíseme que le puedo dar un código para hacer que esto funcione.

ACTUALIZACIÓN: Estoy copiando el código que tengo. Lo usé para formatear archivos * .js. He eliminado un código que no necesitas. Siéntase libre de preguntar si no funciona.

//You need to make a reference to two dlls: envdte envdte80 void FormatFiles(List<FileInfo> files) { //If it throws exeption you may want to retry couple more times EnvDTE.Solution soln = System.Activator.CreateInstance(Type.GetTypeFromProgID("VisualStudio.Solution.11.0")) as EnvDTE.Solution; //try this if you have Visual Studio 2010 //EnvDTE.Solution soln = System.Activator.CreateInstance(Type.GetTypeFromProgID("VisualStudio.Solution.10.0")) as EnvDTE.Solution; soln.DTE.MainWindow.Visible = false; EnvDTE80.Solution2 soln2 = soln as EnvDTE80.Solution2; //Creating Visual Studio project string csTemplatePath = soln2.GetProjectTemplate("ConsoleApplication.zip", "CSharp"); soln.AddFromTemplate(csTemplatePath, tempPath, "FormattingFiles", false); //If it throws exeption you may want to retry couple more times Project project = soln.Projects.Item(1); foreach (FileInfo file in files) { ProjectItem addedItem; bool existingFile = false; int _try = 0; while (true) { try { string fileName = file.Name; _try++; if (existingFile) { fileName = file.Name.Substring(0, (file.Name.Length - file.Extension.Length) - 1); fileName = fileName + "_" + _try + file.Extension; } addedItem = project.ProjectItems.AddFromTemplate(file.FullName, fileName); existingFile = false; break; } catch(Exception ex) { if (ex.Message.Contains(file.Name) && ex.Message.Contains("already a linked file")) { existingFile = true; } } } while (true) { //sometimes formatting file might throw an exception. Thats why I am using loop. //usually first time will work try { addedItem.Open(Constants.vsViewKindCode); addedItem.Document.Activate(); addedItem.Document.DTE.ExecuteCommand("Edit.FormatDocument"); addedItem.SaveAs(file.FullName); break; } catch { //repeat } } } try { soln.Close(); soln2.Close(); soln = null; soln2 = null; } catch { //for some reason throws exception. Not all the times. //if this doesn''t closes the solution CleanUp() will take care of this thing } finally { CleanUp(); } } void CleanUp() { List<System.Diagnostics.Process> visualStudioProcesses = System.Diagnostics.Process.GetProcesses().Where(p => p.ProcessName.Contains("devenv")).ToList(); foreach (System.Diagnostics.Process process in visualStudioProcesses) { if (process.MainWindowTitle == "") { process.Kill(); break; } } tempPath = System.IO.Path.GetTempPath(); tempPath = tempPath + "//FormattingFiles"; new DirectoryInfo(tempPath).Delete(true); }

Espero que esto ayude.