小编Met*_*450的帖子

C# - 设置 pdb 的路径

有什么方法可以在 Visual Studio 2008 下的 C# 中设置程序数据库文件 (*.pdb) 的自定义路径?对于 C++,这非常简单(项目设置 -> 链接器 -> 调试 -> 生成程序数据库文件),但出于某种原因,微软似乎已为 C# 删除(或隐藏)它。

我知道“标准”用法是将 pdb 放在可执行文件旁边的 bin 目录中,但是该目录变得非常混乱,所以我真的希望它们位于 /obj 中,这就是我总是习惯在 C++ 中做。

谢谢!

c# path visual-studio pdb-files

5
推荐指数
1
解决办法
6175
查看次数

Visual Studio 2010 输出面板未更新构建后输出

我最近刚从 VS2008 升级到 VS2010。因为我进行了大量远程调试(通过 VPN),所以我使用 Post-Build 事件在运行之前将编译后的二进制文件和 PDB 复制到目标机器上。我通过调用(除其他外)执行 Robocopy 的批处理文件来做到这一点。

在 VS2008 中,Output 面板会实时显示 robocopy 的输出,即:

5>          Newer             421376    RadarController.pdb
5>    0%  
5>   14%  
5>   29%  
5>   43%  
5>   58%  
5>   72%  
...
Run Code Online (Sandbox Code Playgroud)

然而,在 VS2010 中,它不是一点一点地显示 Post-Build 事件的进度,而是简单地锁定,直到整个事件完成 - 然后输出全部立即出现。在通过较慢的网络连接进行复制时,这是一个特殊问题,因为我不知道一次可能几分钟内发生了什么。无法猜测复制会持续 5 秒还是 5 分钟;如果我不熟悉编译器事件的顺序,我什至不知道它在复制。

这是 2010 年的已知错误,还是有人知道现有的解决方法?

谢谢!

编辑 1:该项目是 C#。

编辑 2:我使用的确切 Robocopy 命令是 robocopy.exe . \\192.168.5.7\Release /NJS /NJH /Z /W:1 /R:5 /E

visual-studio-2010

5
推荐指数
1
解决办法
1850
查看次数

划分双打时C#精度损失

我知道这已经一次又一次地讨论了,但是我似乎无法得到一个一步一步的双重划分的最简单的例子,导致C#的预期的,不完整的结果 - 所以我想知道是否也许有一些编译器标志或其他奇怪的我没有想到的.考虑这个例子:

double v1 = 0.7;
double v2 = 0.025;
double result = v1 / v2;
Run Code Online (Sandbox Code Playgroud)

当我在最后一行之后断开并在VS调试器中检查它时,"result"的值是27.999999999999996.我知道我可以通过更改为"十进制"来解决它,但在周围程序的情况下这是不可能的.像这样的两个低精度双打不能分成28的正确值是不奇怪的?对Math.Round来说唯一的解决方案是结果吗?

c# precision double

5
推荐指数
2
解决办法
7749
查看次数

查询Facebook是否正在使用/可以使用的是什么版本的Graph API

我是一个利用Facebook Graph API的Wordpress插件的作者.最近,一些Graph调用失败了新的插件用户(只有新用户受到影响).经过一番挖掘,我相信我在这里偶然发现了原因:https://developers.facebook.com/docs/apps/versions

特别是,"我的应用程序可以调用早于当前版本的版本吗?" 状态:

应用程序可以调用创建应用程序时最新的API版本

换句话说,即使我的Graph调用指定了一个显式版本(即https://graph.facebook.com/v2.0/me),对于新创建的应用程序,Facebook也会忽略"v2.0"并调用进入2.1.实际上,FQL查询如下:

https://graph.facebook.com/v2.0/fql?q=(myquery)&access_token=(mytoken)

产量:

"error": { "message": "(#12) fql is deprecated for versions v2.1 and higher", "type": "OAuthException", "code": 12

这就引出了我的第一个问题:我在这里遗漏了什么吗?对我来说,这种行为似乎使版本控制几乎无用; 无论我的电话是否指定v2.0,Facebook都会调用该应用程序刚刚创建时存在的最新版本.所以Facebook为支持旧api版本提供的两年时间窗口(参见https://developers.facebook.com/docs/apps/upgrading)什么都不做,因为我总是需要在发布时支持最新版本(或者新建用户的新用户将被破坏).对?

第二个问题(假设以上是正确的):我如何在Facebook上查询当前应用程序正在使用(或者更确切地说,可以使用)的版本?由于明确指定v2.0并不意味着它实际上会使用v2.0,因此查明它是否使用了意外版本至少可以帮助预防可能的错误 - 即包含用户错误报告是有价值的信息.我希望这些信息必须以某种方式存在于access_token中,但我搜索了高低,并且无法弄清楚如何询问"这个令牌适用于什么API版本"(或许,"这是什么API版本应用程序支持"或类似"?

facebook facebook-graph-api facebook-graph-api-v2.0

5
推荐指数
1
解决办法
7910
查看次数

Visual Studio 2019 未将引用的项目添加到 deps.json

我有一个在 Visual Studio 2019 (16.4.5) 中构建的现有 WPF 应用程序,其大部分后端通用代码位于 .NET Standard 类库中。我正在尝试启动一个基于 Avalonia MVVM 构建的跨平台新前端。我已成功创建并运行“Hello World”Avalonia 应用程序。但是,每当我添加对类库的任何引用(即使我创建一个新的 NET 标准类库,它只不过是 VS 创建的存根模板),我都会收到运行时错误:

System.IO.FileNotFoundException: 'Could not load file or assembly 'xxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.'
Run Code Online (Sandbox Code Playgroud)

最终,我意识到 Visual Studio 没有向 deps.json 添加适当的条目。我添加到应用程序中的任何项目引用,这些引用都不会出现在 deps.json 中。如果我构建,我可以手动添加它们 - 即

  },
  "ClassLibrary1/1.0.0": {
    "runtime": {
      "ClassLibrary1.dll": {}
    }
Run Code Online (Sandbox Code Playgroud)

...然后它就可以正常启动了。但是如果我重建,VS 当然会重新生成 deps.json,并且那些项目引用将再次丢失。

为什么 VS 无法将引用的项目正确添加到它生成的 deps.json 中?

.net c# visual-studio .net-core .net-standard

5
推荐指数
1
解决办法
1349
查看次数

从Windows运行时,C#/ C++应用程序崩溃,但不是从Visual Studio运行

我正在开发一个调用非托管(C++)DLL的C#应用​​程序.我发现某个用户操作从Windows资源管理器运行时始终导致应用程序崩溃.但是,从Visual Studio调试器启动时,不会发生崩溃.因此,我无法在崩溃时进入代码并完全调试正在发生的事情.

什么可能导致二进制文件从资源管理器运行时崩溃,但不是从Visual Studio运行?请注意,我正在使用Release版本; 调试版本在Visual Studio Explorer中都不会崩溃.

(如果它是相关的,我可以说崩溃与在C++ DLL中操作malloc分配的数组有关.我通过精心评论代码块,重建,从Windows运行并检查是否跟踪它来跟踪它.发生了崩溃.然而,我已经达到了一个难以在没有能够正确打破调试器的情况下继续进行的程度).

我只对能够在Visual Studio中重新创建崩溃感兴趣.

c# c++ pinvoke visual-studio-2010 visual-studio-debugging

4
推荐指数
1
解决办法
2184
查看次数

C#"拳击"到属性/ 1-Arg构造函数按作业分配

在C#中,假设你有一个简单的类,如:

public class MyFloat
{
    public float Value { get; set; }

    public MyFloat()
    {}

    public MyFloat(float _Value)
    {
        Value = _Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否存在这样的语法,允许您将其Value属性简写为以下内容:

MyFloat[] Arg_f;
Arg_f = new MyFloat[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

而不是需要显式调用构造函数,如:

Arg_f = new MyFloat[] { new MyFloat(1), new MyFloat(2), new MyFloat(3) };
Run Code Online (Sandbox Code Playgroud)

或等效地,即

MyFloat myFloat = 5f;          //Implicitly assign 5f to myFloat.Value
float myFloatValue = myFloat;  //Implicitly get myFloat.Value
Run Code Online (Sandbox Code Playgroud)

这显然类似于装箱/拆箱,除了我试图"装箱"到特定的对象属性.或者你可能会说我试图通过赋值隐式调用1-arg构造函数.

这样的事情在C#中是可能的,还是我只是在疯狂的追逐?

c#

4
推荐指数
1
解决办法
104
查看次数

第一次异常:RPC 服务器不可用

在开发 C# 应用程序时,每当我创建 OpenFileDialog 时,VS 输出窗格中都会出现以下内容:

First-chance exception at 0x75A6C42D (KernelBase.dll) in (myapp).exe: 0x000006BA: The RPC server is unavailable.
Run Code Online (Sandbox Code Playgroud)

我多年来一直在维护这个应用程序,以前绝对没有见过这个,所以我开始在 SVN 中回滚以确定它是什么时候开始的。

令人费解的是,它发生和不发生的修订似乎是不一致的;如果我返回足够远它永远不会发生,但是当我可以检查修订时有一个“区域”,它不会发生,我将检查另一个修订,它会,然后我将返回到第一个,然后这个时间它突然会。换句话说,我似乎无法可靠地确定它何时开始发生。

为了说明这一点,这里是我测试的摘录,为了清楚起见,缩进了。数字是修订版。对于每个测试,我“更新到修订版”并进行完全重建。

      3977: Exception. This is the most-recent revision.
 3839: OK.  Since it didn't happen, I'll start working my way back up to see when it starts
   3843: OK
    3852: OK
     3890: Exception. So it started between 3852 & 3890.
    3852: Exception. Huh?? I JUST tried 3852, and last time it didn't happen!
3778: OK. Going back this …
Run Code Online (Sandbox Code Playgroud)

c# rpc exception visual-studio

2
推荐指数
1
解决办法
3394
查看次数

*在*触发设计器生成的事件之前记录 WinForm 按钮单击

我正在尝试找出一种方法,让我的 WinForms 应用程序将每次按钮单击记录到文件中。到目前为止,我找到的最佳解决方案(来自Log all button clicks in Win Forms app)如下所示:

public class ButtonLogger
{
    public static void AttachButtonLogging(ControlCollection controls)
    {
        foreach (var control in controls.Cast<Control>())
        {
            if (control is Button)
            {
                Button button = (Button)control;
                button.Click += LogButtonClick;
            }
            else
            {
                AttachButtonLogging(control.Controls);
            }
        }
    }

    private static void LogButtonClick(object sender, EventArgs eventArgs)
    {
        Button button = sender as Button;
        WriteLog("Click: " + button.Parent.Name.ToString() + "." + button.Name.ToString() + " (\"" + button.Text + "\")");
    }

    private static void …
Run Code Online (Sandbox Code Playgroud)

.net c# events delegates winforms

1
推荐指数
1
解决办法
2209
查看次数

创建一个可以用函数调用显示的 React 组件(如 react-toastify

通常,当创建一个我们想要有条件地渲染的可重用 React 组件时,我们要么给它一个 prop 来告诉它是否渲染自己:

function TheComponent(props) {
    return(
        props.isVisible?<div>...</div>:null
    );
}
Run Code Online (Sandbox Code Playgroud)

或者只是有条件地从外部渲染整个组件:

function App() {
    //...
    return (
            isVisible ? <TheComponent /> : null
        );
}
Run Code Online (Sandbox Code Playgroud)

或者,如果我们想制作一个可以在应用程序中的任何地方显示/隐藏的组件——比如toast 通知——我们可以包装在一个提供者中并制作一个自定义钩子来访问它的上下文;这将让我们在 provider 内部的任何地方显示/隐藏它,只需调用一个函数:

const App = () => (
  <ToastProvider>
    <OtherStuff />
  </ToastProvider>
);

const OtherStuff = () => {
  const { showToast } = useToast();
  showToast();
  return ...;
};

Run Code Online (Sandbox Code Playgroud)

然而,有一个非常酷的包react-toastify,我似乎无法理解它是如何实现的。你所要做的就是<ToastContainer />在你的应用程序的某个地方放置一个,然后从其他任何地方,你可以:

import { toast } from "react-toastify";
toast.info("this will show the …
Run Code Online (Sandbox Code Playgroud)

reactjs

1
推荐指数
1
解决办法
63
查看次数