第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在NetStandard2.0項(xiàng)目中使用Roslyn編譯動(dòng)態(tài)創(chuàng)建的代碼

在NetStandard2.0項(xiàng)目中使用Roslyn編譯動(dòng)態(tài)創(chuàng)建的代碼

C#
一只名叫tom的貓 2023-12-17 10:43:15
我正在嘗試創(chuàng)建一個(gè)可重用的 .NET Standard 2.0 庫,該庫使用 Roslyn 在運(yùn)行時(shí)將代碼動(dòng)態(tài)編譯為內(nèi)存中的程序集。這個(gè)動(dòng)態(tài)創(chuàng)建的程序集包含從作為庫一部分的基類派生的類。我通過引用該庫的應(yīng)用程序中的反射來實(shí)例化它們。項(xiàng)目結(jié)構(gòu)如下所示:假設(shè)我的 netstandard2.0 庫中有以下類型:namespace MyLibrary{    public abstract class BaseClass    {        public abstract int CalculateSomething();    }}然后,我在 .NET Core 2.2 項(xiàng)目中創(chuàng)建以下單元測(cè)試:namespace NetCore2_2.Tests{    public static class RoslynTests    {        [Fact]        public static void CompileDynamicallyAndInvoke()        {            // Create syntax tree with simple class            var syntaxTree = CSharpSyntaxTree.ParseText(@"using System;using MyLibrary;namespace Foo{    public sealed class Bar : BaseClass    {        public override int CalculateSomething()        {            return (int) Math.Sqrt(42);        }    }}");在此測(cè)試中,我首先解析源自 netstandard2.0 庫中的BaseClass 的一段 C# 代碼。這段代碼還引用了System.Math。然后,我創(chuàng)建一個(gè) C# 編譯對(duì)象,其中包含對(duì)(.NET Core 2.2 的)核心庫和我的庫的引用。該編譯對(duì)象將 DLL 發(fā)送到內(nèi)存流。如果編譯失敗,測(cè)試將失敗并出現(xiàn)包含所有診斷信息的異常。此單元測(cè)試失敗并顯示以下錯(cuò)誤消息:(7,31):錯(cuò)誤CS0012:類型“對(duì)象”;在未引用的程序集中定義。您必須添加對(duì)程序集“netstandard,Version=2.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”的引用。(11,26):錯(cuò)誤CS0012:類型“對(duì)象”;在未引用的程序集中定義。您必須添加對(duì)程序集“netstandard,Version=2.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”的引用。我有以下問題:這是否不起作用,因?yàn)?Roslyn NuGet 包在 .NET Standard 2.0 項(xiàng)目中被引用,因此總是嘗試編譯為 netstandard2.0 目標(biāo)框架 Moniker? 我懷疑netstandard2.0 對(duì) System.Object 有不同的定義,轉(zhuǎn)發(fā)到目標(biāo)平臺(tái)的實(shí)際實(shí)現(xiàn)。而且我的編譯單元中并沒有引用這個(gè)轉(zhuǎn)發(fā)定義。有辦法更改目標(biāo)框架嗎?我查看了CSharpCompilationOptions和EmitOptions,但無法 39;沒有找到任何可以讓我改變目標(biāo)框架的東西。我是否需要使用其他 Roslyn NuGet 軟件包,例如 Microsoft.Net.Compilers.Toolset? 我嘗試避免這種情況,因?yàn)閷?shí)際上想使用默認(rèn)編譯器而不是 NuGet 包中的編譯器。
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

  • 它不起作用,因?yàn)槟膸彀?code>BaseClass,目標(biāo)為.netstandard2.0(這意味著該庫引用了< a i=3>),并且這假設(shè)您的庫(使用?引用庫)應(yīng)該引用?以正確解析所有相應(yīng)的類型。因此,您應(yīng)該添加對(duì)它們的引用(?的?或?的類似?)。 (順便說一句,當(dāng)您從?庫引用?時(shí),您可能應(yīng)該添加幾個(gè)額外的庫作為?的引用)?netstandard.dll 2.0BaseClassnetstandard.dll 2.0netstandard.dll.net47.netstandard.dll.netcore2.2.netstandard2.0.net47path_to_visual_studio\MSBuild\Microsoft\Microsoft.NET.Build.Extensions

  • Roslyn?Compilation?對(duì)目標(biāo)框架一無所知,而且它不應(yīng)該對(duì)目標(biāo)框架有任何了解它。?使用樹和引用(當(dāng)然還有一些選項(xiàng)和引用的元數(shù)據(jù)),因此您應(yīng)該手動(dòng)附加編譯時(shí)所需的引用。 (順便說一句,如果您有?或?文件,您可以使用?來從在大多數(shù)情況下,項(xiàng)目或解決方案文件)CompilationcsprojslnMsBuildWorkspace

  • 如果您知道或可以找到編譯所需的所有引用,我建議您手動(dòng)創(chuàng)建Compilation,否則嘗試使用Microsoft .CodeAnalysis.Workspaces.MSBuild?用于分析?.csproj?或?.sln?文件,然后從中檢索?Compilation他們。?Microsoft.Net.Compilers.Toolset?只是讓您可以通過未安裝在您的系統(tǒng)上但包含在此包中的編譯器來編譯您的項(xiàng)目。


查看完整回答
反對(duì) 回復(fù) 2023-12-17
  • 1 回答
  • 0 關(guān)注
  • 336 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)