zoukankan      html  css  js  c++  java
  • 2018-9-29-Roslyn-通过-Nuget-引用源代码-在-VS-智能提示正常但是无法编译

    title author date CreateTime categories
    Roslyn 通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译
    lindexi
    2018-09-29 12:58:16 +0800
    2018-09-29 12:47:45 +0800
    Roslyn MSBuild 编译器

    本文告诉大家如果在 Nuget 引用源代码的方式引用源代码,在 VisualStudio 的智能提示和 Resharper 的智能提示都能找到对应的类,但是在 VisualStudio 编译或使用命令行 msbuild 编译时提示找不到类

    这个问题是 msbuild 的一个坑,主要是没有主动引用 .nuget.g.props.nuget.g.targets 文件,使用 Microsoft.NET.Sdk 作为 Sdk 的项目文件会自动在 obj 文件夹下生成 project.assets.json、$(ProjectName).csproj.nuget.cache、$(ProjectName).csproj.nuget.g.props 和 $(ProjectName).csproj.nuget.g.targets 文件;其中 .nuget.g.props 和 .nuget.g.targets 中生成了 Import 包中编译相关文件的代码。具体请看MSBuild/Roslyn 和 NuGet 的 100 个坑 - walterlv

    但是在使用 Nuget 引用源代码的时候,因为此时源代码还没加入到编译,在编译的时候 msbuild 找不到类,于是就没继续执行,只是就无法编译通过

    在我的项目编译出现下面的提示

    C:lindexigithubSopisatraJowjeSopisatraJowjeSopisatraJowje.csproj”(默认目标) (1) ->C:lindexigithubSopisatraJowjeSopisatraJowjeSopisatraJowje.csproj”(Build 目标) (1:2) ->C:lindexigithubSopisatraJowjeSopisatraJowjeSopisatraJowje_rb00pftp_wpftmp.csproj”(_CompileTemporaryAssembly 目标) (
    2) ->
    (CoreCompile 目标) ->
      MainWindow.xaml.cs(15,12): error CS0234: 命名空间“lindexi”中不存在类型或命名空间名“Doubi”(是否缺少程序集引用?) [C:lindexigithubSopisatraJowj
    eSopisatraJowjeSopisatraJowje_rb00pftp_wpftmp.csproj]

    简单的解决方法是在 csproj 添加引用 .nuget.g.props 两个文件,引用的方式是在<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0"> 的下一句引用 .nuget.g.props 例如我创建了项目是 SopisatraJowje 我可以使用下面的方式引用

    <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
      <Import Project="objSopisatraJowje.csproj.nuget.g.props"></Import>
    
      <!-- 下面是原来的内容 -->
      <PropertyGroup>
        <LanguageTargets>$(MSBuildToolsPath)Microsoft.CSharp.targets</LanguageTargets>
        <TargetFrameworks>net45;</TargetFrameworks>
        <OutputType>WinExe</OutputType>
      </PropertyGroup>

    在文件的最后再添加引用 nuget.g.targets 文件的最后需要在 </Project> 上一个

      <Import Project="objSopisatraJowje.csproj.nuget.g.targets"></Import>
    </Project>

    也就是文件看起来是这样

    <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
      <Import Project="objSopisatraJowje.csproj.nuget.g.props"></Import>
      
      <PropertyGroup>
        <LanguageTargets>$(MSBuildToolsPath)Microsoft.CSharp.targets</LanguageTargets>
        <TargetFrameworks>net45;</TargetFrameworks>
        <OutputType>WinExe</OutputType>
      </PropertyGroup>
     
    
      <Import Project="objSopisatraJowje.csproj.nuget.g.targets"></Import>
    </Project>
    

    添加了这两个引用就可以解决源代码引用的时候出现了在 VisualStudio 可以跳转找到类,但是在编译的时候找不到类的问题

    MSBuild/Roslyn 和 NuGet 的 100 个坑 - walterlv

  • 相关阅读:
    docker tar 镜像 容器相互转换
    JavaScript执行上下文
    JavaScript 作用域
    原型与原型链
    使用Navicat for Oracle新建表空间、用户及权限赋予
    PL/SQL Developer使用教程(中文)
    一步一步使用bootstrap开发一个博客模板
    How to create a simple blog using ASP.NET MVC
    一个有意思的编程网站
    一个很好的java编程国外网站
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085675.html
Copyright © 2011-2022 走看看