【问题标题】:Add File to Project for Intellisense but do not Compile为 Intellisense 添加文件到项目但不编译
【发布时间】:2016-03-10 20:45:37
【问题描述】:

我正在开发一个项目,我们有一个构建工具,它在构建过程中自动生成源文件并将它们编译进去。但是,这种设置使我们在使用这些生成的类时无法获得智能感知或任何自动完成功能。我想知道是否有一种方法可以将这些文件包含为智能感知参考,而无需实际编译它们。

我们的想法是我们可以将生成的源代码复制到目标文件夹作为构建任务的一部分,然后可以将其用于自动完成,而不会破坏我们的系统。我知道我可以自动包含此文件夹的所有内容,但将 Build Action 设置为 None 并不会提供任何自动完成功能。

我们使用的是 Visual Studio 2013。

【问题讨论】:

    标签: c# visual-studio-2013


    【解决方案1】:

    所以在我的同事的帮助下,我们找到了一个非常有效的解决方案。

    基本上,MSBuild 使用<CompileDependsOn> 来确定从哪里获取智能感知。 <CompileDependsOn> 提供了一个以分号分隔的目标列表,这些目标将文件添加到 <Compile>

    对于我们的情况,对于需要智能感知的项目,我们在项目中添加了以下几行。

    <PropertyGroup>
      <CompileDependsOn>
        customTarget;$(CompileDependsOn)
      </CompileDependsOn>
    </PropertyGroup>
    

    其中customTarget是将生成的文件添加到&lt;Compile&gt;的目标

    【讨论】:

    • 这有效,但前提是它出现在&lt;Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /&gt;之后
    【解决方案2】:

    我猜您可以创建一个新项目,在配置管理器中选择不构建该项目。

    问题是您必须引用该项目。您可以通过将结果替换为已完成的内容来解决此问题,例如设置了“复制到输出文件夹”的文件。

    【讨论】:

    • 添加一个新项目并引用它不会是一个问题,主要问题是使我们不必在生成的输出更改时更改此项目。所以我们只需要配置一次就足够了。
    【解决方案3】:

    在您的项目 csproj 文件中添加以下行。

    <ItemGroup>
        <Content Include="<file path respective of your project>" />
    <ItemGroup>
    

    例子:

    <ItemGroup>
            <Content Include="Common\Constants.cs" />
    <ItemGroup>
    

    【讨论】:

      猜你喜欢
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多