小编Ste*_*n G的帖子

VS 2012构建Hello World时出错:"操作无法完成.参数不正确"

我已经启动了VS 2012.我创建了一个新的解决方案/项目,并使该项目成为一个控制台应用程序.在提供的"Program"类中,在"Main"方法中,我添加了一行,即:

Console.WriteLine("Hello World");
Run Code Online (Sandbox Code Playgroud)

这是我做过的唯一事情.

我右键单击解决方案名称,然后选择"Build".

立即弹出一个标题为"Microsoft Visual Studio"的对话框/警告,其中包含红色圆圈中的银色"X",后面是非常有用的错误文本,内容如下:

操作无法完成.参数不正确.

我已经对这个非常有用的错误进行了广泛的搜索,并得出结论,它在许多不同的情况下出现.在我的情况下,我几天前开始体验它(在一个更复杂的MVC应用程序上),它似乎是间歇性的.有时我会得到错误,有时候不会.有时我可以完全关闭VS并重新打开它仍然会在那里,有时它会消失几个小时.重新启动系统(ick)通常会让它消失.

有帮助吗?现在这让我发疯了.提前谢谢了.

附加信息:如果我在任务管理器中杀死所有Visual Studio应用程序(而不是以更传统的方式关闭Visual Studio),它似乎总是在重新启动Visual Studio时解决问题.仍然感到困惑.

build visual-studio-2012 visual-studio-2013 visual-studio-2015

47
推荐指数
4
解决办法
2万
查看次数

将通用键作为联合字符串中的联合字符串获取的通用类型?

请考虑以下typescript枚举:

enum MyEnum { A, B, C };
Run Code Online (Sandbox Code Playgroud)

如果我想要另一种类型是该枚举键的联合字符串,我可以执行以下操作:

type MyEnumKeysAsStrings = keyof typeof MyEnum;  // "A" | "B" | "C"
Run Code Online (Sandbox Code Playgroud)

这非常有用.

现在我想以这种方式创建一个在枚举上普遍运行的泛型类型,这样我就可以说:

type MyEnumKeysAsStrings = AnyEnumKeysAsStrings<MyEnum>;
Run Code Online (Sandbox Code Playgroud)

我想是正确的语法是:

type AnyEnumKeysAsStrings<TEnum> = keyof typeof TEnum; // TS Error: 'TEnum' only refers to a type, but is being used as a value here.
Run Code Online (Sandbox Code Playgroud)

但是这会产生编译错误:"'TEnum'只引用一个类型,但在这里被用作值."

这是出乎意料和悲伤的.通过从泛型声明的右侧删除typeof,并将其添加到特定类型声明中的type参数,我可以通过以下方式完全解决它:

type AnyEnumAsUntypedKeys<TEnum> = keyof TEnum;
type MyEnumKeysAsStrings = AnyEnumAsUntypedKeys<typeof MyEnum>; // works, but not kind to consumer.  Ick.
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种解决方法,因为这意味着消费者必须记住在通用上指定typeof.

是否有任何语法允许我指定我最初想要的泛型类型,以便对消费者友好?

generics enums typescript

18
推荐指数
4
解决办法
6074
查看次数

在使用AMD时,如何在d.ts文件中引用Typescript枚举?

我想定义一个typescript接口来表示一个错误.像这样的东西:

enum MessageLevel {
    Unknown,
    Fatal,
    Critical,
    Error,
    Warning,
    Info,
    Debug
}

interface IMyMessage {
    name: string;
    level: MessageLevel;
    message: string;
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作.但是,现在(也许)我想在.d.ts文件中声明该接口,以便其他人可以使用它进行输入.但我不想在.d.ts文件中定义枚举,因为那将是实现而不是简单的输入信息.枚举应该在.ts文件中,我们称之为messageLevel.ts:

///<amd-module name='MessageLevel'/>

export enum MessageLevel {
    Unknown,
    Fatal,
    Critical,
    Error,
    Warning,
    Info,
    Debug
}
Run Code Online (Sandbox Code Playgroud)

此时我可以通过这种方式在我的d.ts打字文件中使用它:

import * as ml from "./MessageLevel";

interface IMyMessage {
    name: string;
    level: ml.MessageLevel;
    message: string;
}
Run Code Online (Sandbox Code Playgroud)

我可以使这项工作,但我不喜欢将实现文件导入打字文件的级别混合.我也不喜欢在打字文件中实际实现枚举的想法.

是否有一种干净的方法来保持实施和声明严格分开?

amd typescript

11
推荐指数
3
解决办法
7542
查看次数

如何打包和部署带有符号和源代码的 NuGet 包,以便调试器可以使用该源代码?

我从 .net 框架 Visual Studio 类库项目创建了一个非常简单的 NuGet 包,其中类库源在 C# 中。

我使用这个命令来创建 nuget 包:

nuget pack MyProject.csproj -symbols -Properties "Configuration=Debug" -suffix debug
Run Code Online (Sandbox Code Playgroud)

正如我所料,它创建了两个 nuget 包文件,即:

  • MyProject.1.0.0-debug.symbols.nupkg
  • MyProject.1.0.0-debug.nupkg

除了带有“符号”的包包括 lib 层次结构中的 pdb 文件和 src 文件夹中的源文件之外,这些包基本上是相同的。

鉴于重复,我将文件重命名MyProject.1.0.0-debug.symbols.nupkgMyProject.1.0.0-debug.nupkg,这会覆盖其中一个文件,这没什么大不了的。我现在有一个传统命名的包,其中包含 PDB 和源文件。

我将其部署到内部文件共享提要:

nuget add MyProject.1.0.0-debug.nupkg \\InternalShare\FeedFolder
Run Code Online (Sandbox Code Playgroud)

在一个完全不同的项目和不同的解决方案中,我现在使用 NuGet 包管理器在 Visual Studio 中使用该 NuGet 包。一切都很好。并且代码也能正常工作,在我的例子中,我制作了一个简单的控制台应用程序,它使用了包中的几个类,并且我已经证明它可以正确使用它们并且没有发生任何事故。

到现在为止还挺好。

现在我在消费代码中设置一个断点,并尝试进入源代码调试包。它似乎工作正常,但实际上,它没有进入随包分发的源代码。它实际上从包的创建开始进入原始源代码,在我的机器上完全不同且不相关的文件夹层次结构中。

好的。所以现在我在没有原始源的单独计算机上重新创建我的简单控制台应用程序。在那台单独的计算机上,它位于内部网络上,因此可以访问文件共享,我使用 NuGet 包,再次,一切都编译并正常工作。

但是,当我尝试进入 Visual Studio 调试器中的包源代码时,它根本不起作用。调试器无法找到源代码,即使它就在包文件夹中。(调试器提供反汇编代码——不是很有帮助)。

这似乎应该是一个常见的用例,并且希望在 nuget 包中包含符号和源代码,所以我必须做一些愚蠢的事情,以至于调试器找不到源代码。

各种版本的东西:

  • Visual Studio:专业版 2017 15.9.11
  • VS 中安装的 NuGet 包管理器:4.6.0
  • CLI NuGet 版本:4.8.1.5435
  • 我的示例代码的目标 …

c# visual-studio visual-studio-debugging nuget visual-studio-2017

11
推荐指数
2
解决办法
4213
查看次数

VS 2015显示状态栏消息"完成您请求的操作......"

刚刚从VS 2012升级到2015年.

构建复杂的解决方案需要一段时间才能开始,在状态栏中显示一条新的状态消息,显示"完成您请求的操作...",在构建实际开始之前的20-30秒.这与旧的对话框窗口"等待后台操作完成"不同.我无法分辨出发生了什么以及显示此消息的原因,以及如何避免它,因为它似乎表明了不必要的工作.

visual-studio visual-studio-2015

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

各种 NuGet 包中的 Azure CloudStorageAccount 命名空间冲突,以及迁移到更新的 Azure SDK

我知道我参加这个聚会可能有点晚了,但仍然感到困惑。

多年来,我们一直在使用 NuGet 包WindowsAzure.Storage来处理 Blob、表和队列,在 .Net 的上下文中并使用 .Net Azure SDK。

在我们开发的许多 Azure Web 应用程序的最底层共享代码中,我们有一种缓存模式,CloudStorageAccount用于获取这些存储实体所需的各种客户端。我们使用以下 C# 代码获取该存储帐户:

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
Run Code Online (Sandbox Code Playgroud)

这“storageAccount”缓存,我们用它在整个应用可以访问各种存储客户端,即CloudBlobClientCloudTableClientCloudQueueClient,就像这样:

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
Run Code Online (Sandbox Code Playgroud)

这些客户端也被缓存,但这可能与这个问题无关。

Microsoft 似乎鼓励(尽管可能没有任何弃用警告?)迁移到较新的 SDK,这些 SDK 位于Microsoft.Azure.Storage.Xxxxxx和/或中的 NuGet 包中Azure.Storage.Xxxxxxx,但这些 NuGet 包层次结构不支持表,仅支持 Blob 和队列(和文件,我目前没有使用)。

相反,表似乎处于不同的层次结构中,即Microsoft.Azure.Cosmos.Table.

但是CloudStorageAccount在 in 中Microsoft.Azure.Cosmos.Table声明的一个类型和在Microsoft.Azure.Storage.Common.

然后甚至更新的Azure.Storage.Xxxxxxxx库似乎对表没有任何支持。

当然,我可以为类型设置别名或始终完全指定它们,但这意味着我将不得不重写我的缓存代码(不是世界末日)但是整个练习的一部分让我怀疑我是否遗漏了一些这些各种不同存储实体的性质中的关键重要概念。我也很犹豫,因为我似乎可以打破一些第三方依赖。所以整个问题看起来真的很棘手。

我非常感谢任何概念上的理解、指向综合学习文档的指针、代码示例、建议或解释。表对我们来说很关键,但我怀疑我们是否会很快迁移到新的 Cosmos DB 表。

.net c# azure azure-storage azure-table-storage

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

如何使用带有React的Typescript/JSX中的箭头函数的泛型?

使用Typescript,在Visual Studio中键入".ts"文件,请考虑以下声明:

export const foo = <T>(myObject: T) => myObject.toString();
Run Code Online (Sandbox Code Playgroud)

这很好用,类型检查很好,一切都很棒.

现在将完全相同的代码放入用于JSX和React的".tsx"文件中.

Intellisense非常沮丧和抱怨,因为它试图将<T>变成React JSX元素.但我的目的是让编译器将其视为通用类型指示符.

编译器抱怨:

[gulp-typescript] 17008 JSX元素'T'没有对应的结束标记.

我已经尝试了许多语法解决方法来尝试让IDE和编译器让我逃脱J​​SX并强制编译器将<T>理解为通用,就像JSX未使用时一样.但我找不到这种魔法酱.

谁比我更聪明谁能想到这一点?

generics lambda typescript reactjs react-jsx

6
推荐指数
3
解决办法
1208
查看次数

如何在 Typescript 中高效使用嵌套模块

考虑以下源打字稿文件“src.ts”:

export module moduleA {
    export enum enumA {
        val1 = 0,
        val2 = 1
    };
};

export module moduleB {
    export module moduleC {
        export enum enumC {
            val3 = 0,
            val4 = 1
        };
    };
};
Run Code Online (Sandbox Code Playgroud)

并将以下文件视为同一文件夹中的消费者:

import { moduleA, moduleB } from "./src";

const A: moduleA.enumA = moduleA.enumA.val1;

const B: moduleB.moduleC.enumC = moduleB.moduleC.enumC.val3;
Run Code Online (Sandbox Code Playgroud)

这工作得很好,即使有点冗长。但现在为了尝试解决这种情况的“冗长”并使代码更易于阅读,我想做类似的事情:

import { moduleB.moduleC.enumC as enumC } from "./src";

const C: enumC = enumC.val3;
Run Code Online (Sandbox Code Playgroud)

但这是一个编译器错误——“模块没有导出的成员 moduleC”。

但实际上确实如此!

就我而言,有时我甚至想更深入地研究嵌套模块,如果我愿意在每次使用时都以解除引用的方式将它们写出来,那就没问题了。但我不知道如何取消引用导入语句中的嵌套。这可能吗?

import module export typescript

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

ES6 Promise 错误未按预期冒泡

我从 E6 Promises 开始。我非常喜欢它们,但有一个关于错误处理的重要概念,我不明白,希望得到一些澄清。

让我们假设以下简单的函数返回一个承诺:

    function promiseString(str, timeout, doResolve) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                if (doResolve) {
                    resolve(str);
                } else {
                    reject(new Error("Rejecting " + str));
                }
            }, timeout);
        });
    }
Run Code Online (Sandbox Code Playgroud)

它非常简单,只为传递给它的字符串返回一个承诺,并导致该承诺在“超时”毫秒内被解析或拒绝(基于第三个参数)。

我可以按预期完全消耗它,如下所示:

            promiseString("One", 100, true)
                .then((str) => { console.log("First then is " + str); return promiseString(str + " two", 100, true); })
                .then((str) => { console.log("Second then is " + str); return promiseString(str + " three", 100, true); })
                .then((str) => console.log(str))
                .catch((err) => …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling promise ecmascript-6

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

为什么我的ES6 Promise Rejection需要立即使用以避免出现控制台错误消息?

请注意:以下是在不同浏览器上表现不同的问题.所以这可能是一个浏览器实现问题.无论如何,我会喜欢一些建议.

在我的应用程序中,我创建了一些承诺,我可能不会消费,直到将来很长一段时间.哪个应该没问题,毕竟它们是承诺.

如果解决了存储的承诺,则没有问题.我可以根据自己的需要尽可能多地消费它,也可以随心所欲地消费它.正如所料.

但是,如果被拒绝的承诺被拒绝,则存在问题.除非我在制作完成后立即消除拒绝(不确定多久),否则Chrome或Firefox中会出现一个控制台消息,表明存在未被拒绝的承诺拒绝/错误.IE不会弹出该错误.

请考虑以下代码:

console.log("About to make a promise rejection.");
var foo = Promise.reject(new Error("Foo Rejected Promise."));
console.log("Promise rejection made.");
Run Code Online (Sandbox Code Playgroud)

请注意,没有使用或消费promise foo.它只是存储起来以备将来使用.

IE上的控制台如下所示:

即将拒绝承诺.

承诺拒绝.

这是预期的.但是,Chrome上的相同代码将生成以下控制台:

即将拒绝承诺.

承诺拒绝.

未捕(承诺)错误:Foo拒绝承诺.(...)

除了围绕"未捕获"错误的措辞之外,Firefox看起来非常像Chrome.

但问题是,我打算在很久以后处理这个"错误",当时我正在消费这个承诺.仅仅有一个被拒绝的承诺不应该导致控制台错误.....如果我使用了承诺并且没有处理错误,那么应该会发生.

要模拟错误的"更晚"处理,请考虑对代码的这种更改:

console.log("About to make a promise rejection.");
var foo = Promise.reject(new Error("Foo Rejected Promise."));
console.log("Promise rejection made.");
setTimeout(() => {
    foo.catch((err) => {
        console.log("Displaying " + err.message + " 10 seconds later.");
    });
}, 10000);
Run Code Online (Sandbox Code Playgroud)

现在在这种情况下,我们通过在超时后在控制台上显示某些内容来"处理"错误.现在IE仍然按照我的预期处理这个:

即将拒绝承诺.

承诺拒绝.

显示Foo拒绝的承诺.10秒后

在这种情况下,Firefox确实喜欢IE,并准确显示这些消息,并没有给我一个错误的控制台错误.

但是,Chrome仍会出现错误错误:

即将拒绝承诺.

承诺拒绝.

未捕(承诺)错误:Foo拒绝承诺.(...)

显示Foo拒绝的承诺.10秒后

所以Chrome都抱怨我的错误没有被处理,然后显示它已被处理. …

javascript cross-browser ecmascript-6 es6-promise

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