我正在尝试使用C#4.0编译我的excel插件,并在Visual Studio中构建项目时开始遇到此问题.告诉你我之前没有遇到过这个问题,这很重要.什么可能导致这种情况发生?
我们在 Visual Studio 2022(v.17.2.2 64 位)中拥有一个庞大的解决方案(ASP.NET MVC、C#)。
Roslyn 代码分析始终使用高 CPU 和 RAM。有办法防止这个问题吗?配置还是其他?
由于尽管在CLR中有一些支持,但不变性并没有完全融入C#到F#的程度,或完全进入框架(BCL),对于C#的(im)可变性有什么相当完整的解决方案?
我的偏好顺序是一个由兼容的一般模式/原则组成的解决方案
那
我还希望包含您作为社区可能提出的模式,这些模式不完全适合框架,例如通过接口表达可变性意图(其中两个客户端不应该更改某些内容并且可能只想更改某些内容通过接口这样做,而不是支持类(是的,我知道这不是真正的不变性,但足够):
public interface IX
{
int Y{ get; }
ReadOnlyCollection<string> Z { get; }
IMutableX Clone();
}
public interface IMutableX: IX
{
new int Y{ get; set; }
new ICollection<string> Z{ get; } // or IList<string>
}
// generally no one should get ahold of an X directly
internal class X: IMutableX
{
public int Y{ get; set; }
ICollection<string> IMutableX.Z …Run Code Online (Sandbox Code Playgroud) 假设我有一个大型XML文件,其结构如下:
<MyXml>
<Data1>
<Node1>1234</Node1>
<Node2>abc<Node2>
<Node3>gfdf</Node3>
...
<Node10000>more text</Node10000>
</Data1>
<Data2>
...
</Data2>
</MyXml>
Run Code Online (Sandbox Code Playgroud)
我希望将这个XML转换为另一个看起来完全相同的XML,但是将某个字符串连接到某个节点,比如Node766.我当然正在使用XSLT,并想知道除了Node766之外我怎么能告诉它除了Node766之外还要复制每个东西,在输出之前我必须做些什么.
我的一台开发机器遇到了一个相当令人不安的问题,我希望有人可以告诉我.
我有一个大型的Visual Studio 2010 VB解决方案,针对.NET Framework 4.0打开,可以在许多Visual Studio 2010安装中找到 - 除了一个.打开解决方案时出现"错误"(更多消息):
未安装项目目标框架
VB项目的目标是".NETFramework,Version = v4.0",它没有安装在这台机器上.你必须下载这个框架才能打开并构建这个项目.为了继续,你必须在下面选择一个选项.
这是一个完整上下文的截图:
http://img507.imageshack.us/i/errorlc.jpg/
我试过了:
在步骤2之后再次重试步骤1(未修复).
暂时使用的是.NET Framework清除工具,以便从计算机(包括注册表)中删除.NET Framework 4.0的所有痕迹,然后再次安装.NET Framework 4.0.但是错误已经恢复.
我不确定这是一个.NET Framework 4.0文件损坏的问题,在Visual Studio中是什么,或者只是Visual Studio找不到.NET Framework 4.0.(我找到了几个可能的'解释',但没有解决这个问题.
机器正在运行Windows 7(64位).
任何解决这个问题的想法都会受到热烈欢迎!
有关XDocuments和Linq的新手,请建议一个从xml字符串中的特定标记中检索数据的解决方案:
如果我有一个来自webservice响应的XML字符串(为了方便我格式化了xml):
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCashFlowReportResponse xmlns="http://tempuri.org/">
<GetCashFlowReportPdf>Hello!</GetCashFlowReportPdf>
</GetCashFlowReportResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
使用以下代码,仅当GetCashFlowReportResponsetag没有"xmlns"属性时才能获取值.不知道为什么?否则,它始终返回null.
string inputString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><GetCashFlowReportResponse xmlns=\"http://tempuri.org/\"><GetCashFlowReportPdf>Hello!</GetCashFlowReportPdf></GetCashFlowReportResponse></soap:Body></soap:Envelope>"
XDocument xDoc = XDocument.Parse(inputString);
//XNamespace ns = "http://tempuri.org/";
XNamespace ns = XNamespace.Get("http://tempuri.org/");
var data = from c in xDoc.Descendants(ns + "GetCashFlowReportResponse")
select (string)c.Element("GetCashFlowReportPdf");
foreach (string val in data)
{
Console.WriteLine(val);
}
Run Code Online (Sandbox Code Playgroud)
我无法更改Web服务以删除该属性.是否有更好的方法来读取响应并将实际数据返回给用户(以更易读的形式)?
编辑: 解决方案:
XDocument xDoc = XDocument.Parse(inputString);
XNamespace ns = "http://tempuri.org/";
var data = from c in xDoc.Descendants(ns …Run Code Online (Sandbox Code Playgroud) 我有以下场景:
public interface ISomething
{
void DoStuff();
//...
}
public class Something : ISomething
{
private readonly ISomethingElse _somethingElse;
//...
public Something (ISomethingElse somethingElse)
{
Contract.Requires(somethingElse != null);
_somethingElse = somethingElse;
}
public void DoStuff()
{
// *1* Please look at explanation / question below
_somethingElse.DoThings();
}
}
Run Code Online (Sandbox Code Playgroud)
在第1行并且打开静态检查器时,我会收到一条警告,说明_somethingElse可能为空,如果我添加合同,它会给我错误
[Type]实现接口方法{Interface.Method}因此无法添加需求
这里最好的事情是什么?我看到的选项包括
Contract.Assume请注意readonly,在构造函数中设置值后,该字段是如此,因此无法更改.因此,代码合同的警告似乎有点无关紧要.
我有这些扩展方法和枚举类型:
public static bool IsOneOf<T>(this T thing, params T[] things)
{
return things.Contains(thing);
}
public static bool IsOneOf<T>(this T? thing, params T[] things) where T : struct
{
return thing.HasValue && things.Contains(thing.Value);
}
public enum Color { Red, Green, Blue }
Run Code Online (Sandbox Code Playgroud)
if下面的第一个编译; 第二个不是:
if ((x.Y?.Color).IsOneOf(Color.Red, Color.Green))
;
if (x.Y?.Color.IsOneOf(Color.Red, Color.Green))
;
Run Code Online (Sandbox Code Playgroud)
它们仅因额外的括号而异.为什么我要这样做?
起初我怀疑它是从做一个双隐式转换bool?到bool,然后回bool?,但是当我删除第一个扩展方法,它抱怨不存在隐式转换,从bool到bool?.然后我检查了IL并且没有演员阵容.反编译回C#会产生如下情况:
if (!(y != null ? new Color?(y.Color) : new Color?()).IsOneOf<Color>(new Color[2]
{
Color.Red,
Color.Green
}));
Run Code Online (Sandbox Code Playgroud)
这对于我正在运行的CLR版本以及我的期望是好的.我没想到的是 …
我在构建过程中使用了几个自定义工具,主要是用于服务引用的代码生成器,T4模板等.
当这些产生错误或警告时,它们会按预期显示在" 错误列表"窗口中.但是,如果我进行构建,重建或清理某些部分解决方案,而这些部分没有触及先前产生的错误(比如说我没有构建一个服务引用导入失败的项目),旧列表仍然是显示.
有没有办法解决这个问题:工具,插件,构建动作,什么?我不想忽略错误/警告,只想根据我正在做的事情展示相关的错误/警告.如果不是,我想这将是VS团队的请求.
我收到"在创建模型时无法使用上下文." 在我的一个网页中的Web应用程序中出现问题.此特定网页每2-3秒POST一次,以刷新屏幕.根据我的测试,我发现如果我有2个或更多浏览器实例打开到这个页面,几分钟后我收到一个"创建模型时不能使用上下文"来自存储库深处的异常.
此代码调用"服务"来检索所需的数据.此代码在MVC Controller类的自定义授权属性中执行.
// Code in custom "Authorization" attribute on the controller
int? stationId = stationCookieValue; // Read value from cookie
RoomStationModel roomStationModel = RoomStationService.GetRoomStation(stationId); // Error occurs inside this call
Run Code Online (Sandbox Code Playgroud)
这是"RoomStationModel"
public class RoomStationModel
{
[Key]
public int RoomStationId { get; set; }
public int? RoomId { get; set; }
[ForeignKey("RoomId")]
public virtual RoomModel Room { get; set; }
/* Some other data properties.... */
}
public class RoomModel
{
[Key]
public int RoomId { get; set; } …Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
xml ×2
.net-4.0 ×1
build ×1
c#-6.0 ×1
error-list ×1
frameworks ×1
immutability ×1
linq-to-xml ×1
mutable ×1
target ×1
xslt ×1