1

我有一个非常简单的程序:

using System;
using System.Windows.Forms;
using System.Text;
using System.IO;

namespace NS
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                Console.SetIn(new StreamReader(Console.OpenStandardInput(2000)));
                //get some content using Console.ReadLine() and prompting using Console.WriteLine();
                string HTML =
                string.Format(@"HTML redacted", someFormatString, w/e);
                Clipboard.SetText(HTML);
                Console.ReadKey(true);
                string JS = string.Format(@"JS redacted", someFormatString, w/e);
                Clipboard.SetText(JS);
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

旁注:是的,我知道在 Main 周围包装 try/catch 不是首选,但我现在需要它来进行调试。

我引用了所有正确的程序集,这是 csproj 中的程序集引用:

<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />

但是,当我尝试从资源管理器加载它时,它会出现 0xc000142。不过我不知道是什么意思。

不过,如果我从 CMD 加载它,效果会很好。

有任何想法吗?我尝试添加引用,更改为 System.Windows Clipboard 类,创建一个新项目并复制代码,但没有任何效果。

编辑:因为这似乎并不清楚:这是一个控制台应用程序,碰巧需要在表格中使用剪贴板类。这不是成为表单/CLI 应用程序的尝试。

4

2 回答 2

2

评论后编辑

听起来你的机器有问题。这是我的测试程序的发布版本,它在我的机器上运行。如果它不能在您的设备上运行,则说明您的 .net 安装已损坏或发生类似情况。我建议也尝试在另一台计算机上。

这是.net 4.5 顺便说一句。

如果其他人可以确认它有效,而且我没有疯,那就太棒了:)

http://23.23.250.9/ClipboardInConsole.zip

请注意,为了让剪贴板工作,您只需要参考

System
System.Windows.Forms

不知道你需要所有其他人做什么,但对于剪贴板来说,这两个就足够了,项目仍然可以构建和运行。祝你好运!


我原来的答案:

需要单线程单元模式才能正常工作。添加以下属性,这应该可以工作。请注意,此答案是在问题中添加 [STAThread] 的 OP 编辑​​之前发布的。

    [STAThread]
    static void Main(string[] args)

注意:如果您Console.ReadKey();在 catch 块中添加一个,您将看到该错误。您也只需要对 System.Windows.Forms 的引用。

注意 2:如果它仍然无法正常工作,那么您还有另一个您没有看到的错误。尝试我在 Catch{} 块中添加 Console.ReadKey() 的建议并查看异常。

我的(你的)编译和工作的完整代码:

using System;
using System.Windows.Forms;
using System.Text;
using System.IO;

namespace NS
{

    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                Console.SetIn(new StreamReader(Console.OpenStandardInput(2000)));
                //get some content using Console.ReadLine() and prompting using Console.WriteLine();
                string HTML = "<html>";
                //string.Format(@"HTML redacted", someFormatString, w / e);
                Clipboard.SetText(HTML);
                Console.ReadKey(true);
                string JS = "JS { }";//string.Format(@"JS redacted", someFormatString, w / e);
                Clipboard.SetText(JS);
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.ReadKey();
            }
        }
    }
}
于 2013-03-12T19:13:39.083 回答
0

我有几个选择给你:

1) 尝试在管理员模式下运行 Visual Studio。右键单击 VS 图标 -> 以管理员身份运行。让我知道这是否可行。

2) 检查您的项目设置并确保它是在选择“任何 CPU”的情况下构建的。

于 2013-03-12T19:13:40.247 回答