File: ProjectSystemShim\Interop\ICSharpProjectSite.cs
Web Access
Project: src\src\VisualStudio\CSharp\Impl\Microsoft.VisualStudio.LanguageServices.CSharp_bcxn1drg_wpftmp.csproj (Microsoft.VisualStudio.LanguageServices.CSharp)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System;
using System.Runtime.InteropServices;
 
namespace Microsoft.VisualStudio.LanguageServices.CSharp.ProjectSystemShim.Interop;
 
[ComImport]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("5D41CF84-3A90-48d6-A445-CA22E125B691")]
internal interface ICSharpProjectSite
{
    /// This function is called when the project is being closed.  The site
    /// should release any referenced pointers it has on the project object.
    void Disconnect();
 
    // Returns the C# compiler
    void GetCompiler(out ICSCompiler compiler, out ICSInputSet inputSet);
 
    // Check the timestamps for all input files (including all references
    // and resource files) against the given timestamp and set pfMustBuild
    // accordingly.
    bool CheckInputFileTimes(System.Runtime.InteropServices.ComTypes.FILETIME output);
 
    // Build the project using current configuration
    void BuildProject([MarshalAs(UnmanagedType.IUnknown)] object progress);
 
    /// <summary>
    /// This function is unused and unimplemented. It is just a placeholder in the vtable for this public interface.
    /// </summary>
    /// <remarks>See http://psph/devdiv~bugs/114172. </remarks>
    [PreserveSig]
    void Unused();
 
    // Called when source files are added/removed to/from project
    void OnSourceFileAdded([MarshalAs(UnmanagedType.LPWStr)] string filename);
    void OnSourceFileRemoved([MarshalAs(UnmanagedType.LPWStr)] string filename);
 
    // Called when resource files are added/removed to/from project
    [PreserveSig]
    int OnResourceFileAdded([MarshalAs(UnmanagedType.LPWStr)] string filename, [MarshalAs(UnmanagedType.LPWStr)] string resourceName, bool embedded);
    [PreserveSig]
    int OnResourceFileRemoved([MarshalAs(UnmanagedType.LPWStr)] string filename);
 
    // NOTICE: OnImportAdded is superseded by OnImportAddedEx.
    // The function has not been removed due to the hard-dependency on this particular signature in Venus' 
    // templates
    [PreserveSig]
    int OnImportAdded([MarshalAs(UnmanagedType.LPWStr)] string filename, [MarshalAs(UnmanagedType.LPWStr)] string project);
 
    // Called when references (imports) are removed.  If the reference is a
    // project-reference, project specifies the project uniquely.  Otherwise it
    // is NULL.  On removal, it is up to the callee to know whether the file specified
    // as a project reference. 
    void OnImportRemoved([MarshalAs(UnmanagedType.LPWStr)] string filename, [MarshalAs(UnmanagedType.LPWStr)] string project);
 
    // Called when the output file name for the active configuration has changed
    void OnOutputFileChanged([MarshalAs(UnmanagedType.LPWStr)] string filename);
 
    // Called when the active configuration has changed
    void OnActiveConfigurationChanged([MarshalAs(UnmanagedType.LPWStr)] string configName);
 
    /// <summary>
    /// Called when the project is fully loaded -- used to signal the background parsing thread to begin processing
    /// project files.
    /// </summary>
    void OnProjectLoadCompletion();
 
    // Called to obtain the top-level Code Model object for this project
    [PreserveSig]
    int CreateCodeModel([MarshalAs(UnmanagedType.IUnknown)] object parent, out EnvDTE.CodeModel codeModel);
 
    // Called to obtain a file-level Code Model object for the given file
    [PreserveSig]
    int CreateFileCodeModel([MarshalAs(UnmanagedType.LPWStr)] string fileName, [MarshalAs(UnmanagedType.IUnknown)] object parent, out EnvDTE.FileCodeModel fileCodeModel);
 
    // Called when references (imports) are added/removed
    void OnModuleAdded([MarshalAs(UnmanagedType.LPWStr)] string filename);
    void OnModuleRemoved([MarshalAs(UnmanagedType.LPWStr)] string filename);
 
    // Called to obtain the list of classes from the project that have a valid Main()
    // method (used to populate the Startup Object list).  If ppszClassNames is NULL,
    // piCount is filled with the number of classes.  Otherwise, up to *piCount names
    // are copied to ppszClassNames.  *piCount is always filled with the total number
    // of startup classes -- the function returns S_FALSE if there wasn't enough
    // room in ppszClassNames provided.  Note that because the names returned are in
    // the name table, they don't need to be released/freed.
    [PreserveSig]
    int GetValidStartupClasses([Out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.SysUInt, SizeParamIndex = 1)] IntPtr[] ppszClassNames, ref int picount);
 
    // Called when aliases for an import are changed
    // file : The name of the reference file we are changing the aliases for
    // project : If the reference is to a project, then project specifies that project uniquely
    // previousAliasesCount : number of elements in the previousAliases array
    // currentAliasesCount : number of elements in the currentAliases array
    // previousAliases : the previous aliases for this import
    // currentAliases : the current aliases for this import
    void OnAliasesChanged(
        [MarshalAs(UnmanagedType.LPWStr)] string file,
        [MarshalAs(UnmanagedType.LPWStr)] string project,
        int previousAliasesCount,
        [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] previousAliases,
        int currentAliasesCount,
        [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 4)] string[] currentAliases);
 
    /// <summary>
    /// Called when references (imports) are added. If the reference is a project-reference, project specifies the
    /// project uniquely. Otherwise it is NULL. On removal, it is up to the callee to know whether the file
    /// specified as a project reference.
    /// </summary>
    /// <param name="filename">The filename to add a reference to.</param>
    /// <param name="project">If the reference being added is a project reference, then this is a non-null string
    /// that defines this uniquely.</param>
    /// <param name="optionID">A CompilerOption enumeration indicating whether the reference is a regular reference 
    /// (OPTID_IMPORTS) or the one that needs to be embedded into the target assembly
    /// (OPTID_IMPORTSUSINGNOPIA).</param>
    [PreserveSig]
    int OnImportAddedEx([MarshalAs(UnmanagedType.LPWStr)] string filename, [MarshalAs(UnmanagedType.LPWStr)] string project, CompilerOptions optionID);
}