or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

compilation.mdfast-compilation.mdhtml-processing.mdindex.mdtransforms.mdtsconfig.mdvisual-studio.mdwatch-mode.md
tile.json

visual-studio.mddocs/

Visual Studio Integration

Integration with Visual Studio TypeScript project files (.csproj and .vbproj) allowing grunt-ts to use compilation settings and file lists from Visual Studio projects.

Capabilities

Visual Studio Project Support

Use TypeScript compilation settings and file lists from Visual Studio project files.

/**
 * Visual Studio project integration options
 */
interface IVisualStudioProjectSupport {
  /** Path to Visual Studio project file (.csproj or .vbproj) */
  project: string;
  /** Visual Studio configuration to use (e.g., 'Debug', 'Release') */
  config?: string;
  /** Ignore files specified in Visual Studio project */
  ignoreFiles?: boolean;
  /** Ignore compiler settings from Visual Studio project */
  ignoreSettings?: boolean;
}

// Usage in target configuration
interface VSTargetConfig {
  /** Visual Studio project integration (string or object form) */
  vs?: string | IVisualStudioProjectSupport;
}

Simple VS Integration

Use Visual Studio project with default settings.

// String form - uses all settings and files from VS project
interface SimpleVSConfig {
  vs: string; // Path to .csproj or .vbproj file
}

Usage Example:

grunt.initConfig({
  ts: {
    vsProject: {
      vs: 'MyProject/MyProject.csproj'
      // Uses all TypeScript settings and files from the VS project
    }
  }
});

Advanced VS Integration

Fine-grained control over which Visual Studio project elements to use.

interface AdvancedVSConfig {
  vs: {
    /** Path to Visual Studio project file */
    project: string;
    /** VS configuration name to use */
    config?: string;
    /** Whether to ignore files from VS project */
    ignoreFiles?: boolean;
    /** Whether to ignore compiler settings from VS project */
    ignoreSettings?: boolean;
  };
}

Usage Examples:

// Use VS compiler settings but custom file list
grunt.initConfig({
  ts: {
    customFiles: {
      src: ['src/**/*.ts'], // Custom file list
      vs: {
        project: 'MyProject/MyProject.csproj',
        config: 'Release',
        ignoreFiles: true // Use src glob instead of VS files
      }
    }
  }
});

// Use VS files but custom compiler settings  
grunt.initConfig({
  ts: {
    customSettings: {
      vs: {
        project: 'MyProject/MyProject.csproj',
        ignoreSettings: true // Use options below instead of VS settings
      },
      options: {
        target: 'es6',
        module: 'commonjs',
        sourceMap: true
      }
    }
  }
});

Configuration Override Behavior

Understanding how Visual Studio settings interact with grunt-ts options.

interface VSOverrideBehavior {
  /** Gruntfile options override Visual Studio project settings */
  overridePriority: "gruntfile-wins";
  /** Files from VS project are added to src files (duplicates resolved) */
  fileCombination: "additive-with-deduplication";
  /** VS settings are applied first, then Gruntfile options override */
  settingsOrder: "vs-then-gruntfile";
}

Override Example:

// Visual Studio project has:
// - target: "es3"  
// - sourceMap: false
// - files: ["app.ts", "utils.ts"]

ts: {
  override: {
    src: ["additional.ts"], // Added to VS files
    vs: 'MyProject.csproj',
    options: {
      target: 'es5',    // Overrides VS "es3" setting
      sourceMap: true   // Overrides VS "false" setting
      // Other VS settings remain unchanged
    }
  }
}

// Final compilation:
// - Files: ["app.ts", "utils.ts", "additional.ts"]
// - target: "es5" 
// - sourceMap: true
// - Other settings from VS project

VS Configuration Support

Support for different Visual Studio build configurations.

interface VSConfigurationSupport {
  /** Available configurations depend on Visual Studio project setup */
  commonConfigurations: ["Debug", "Release"];
  /** Custom configurations are supported */
  customConfigurations: boolean;
  /** Default configuration if not specified */
  defaultConfig: "current-vs-configuration";
}

Configuration Example:

ts: {
  debug: {
    vs: {
      project: 'MyProject.csproj',
      config: 'Debug'    // Use Debug configuration settings
    }
  },
  release: {
    vs: {
      project: 'MyProject.csproj', 
      config: 'Release'  // Use Release configuration settings
    }
  }
}

File Resolution

How Visual Studio project files are resolved and combined with grunt-ts file specifications.

interface VSFileResolution {
  /** TypeScript files referenced in VS project are included */
  vsFileInclusion: "automatic";
  /** Files from src globs are added to VS files */
  srcFileAddition: "additive";
  /** Duplicate files between VS and src are resolved */
  duplicateHandling: "deduplicated";
  /** File order: VS files first, then src files */
  fileOrder: "vs-first-then-src";
}

Integration with Other Features

How Visual Studio integration works with other grunt-ts features.

interface VSFeatureIntegration {
  /** VS integration works with transforms */
  transformsCompatible: boolean;
  /** VS integration works with reference files */
  referenceFilesCompatible: boolean;
  /** VS integration works with HTML processing */
  htmlProcessingCompatible: boolean;
  /** Fast compilation works with VS projects */
  fastCompilationCompatible: boolean;
  /** Watch mode works with VS projects */
  watchModeCompatible: boolean;
}

Full Integration Example:

ts: {
  fullVSIntegration: {
    vs: {
      project: 'MyProject.csproj',
      config: 'Release'
    },
    html: ['templates/**/*.html'],
    reference: 'references.ts',
    watch: '.',
    options: {
      fast: 'watch',
      sourceMap: true, // Override VS setting
      htmlModuleTemplate: 'Templates.<%= filename %>'
    }
  }
}

Disabling Visual Studio Build

When using grunt-ts with Visual Studio projects, you may want to disable the built-in Visual Studio TypeScript build to avoid conflicts.

interface VSBuildDisabling {
  /** Disable VS TypeScript build while keeping project properties working */
  disableVSBuild: "modify-msbuild-targets";
  /** Keep Visual Studio TypeScript properties pane functional */
  keepPropertiesPane: boolean;
  /** Custom MSBuild targets can override TypeScript build */
  customTargets: "supported";
}

Limitations

Important limitations when using Visual Studio integration.

interface VSIntegrationLimitations {
  /** files configuration not supported with vs option */
  filesConfigConflict: "not-supported";
  /** Only .csproj and .vbproj files are supported */
  supportedProjectTypes: [".csproj", ".vbproj"];
  /** Requires Visual Studio project file to exist and be readable */
  projectFileRequirement: "must-exist";
  /** VS project must contain TypeScript configuration */
  tsConfigRequirement: "typescript-settings-must-exist";
}

Error Handling

Visual Studio integration error handling and troubleshooting.

interface VSErrorHandling {
  /** Errors when VS project file is not found */
  missingProjectFile: "compilation-aborted";
  /** Errors when VS project cannot be parsed */
  parseErrors: "compilation-aborted";
  /** Warnings when specified configuration is not found */
  missingConfiguration: "falls-back-to-default";
  /** Warnings when no TypeScript files found in VS project */
  noTSFiles: "continues-with-src-only";
}

Error Example:

# Missing project file
Error: Visual Studio project file not found: MyProject.csproj

# Invalid configuration  
Warning: Configuration 'InvalidConfig' not found in project, using default

# No TypeScript files in project
Warning: No TypeScript files found in Visual Studio project, using src files only