小编Tre*_*ott的帖子

"无法启动IIS Express Web服务器"错误

尝试从Visual Studio启动IIS Express时,我收到此错误,该项目配置为侦听localhost以外的地址.在给出错误"无法启动IIS Express Web服务器"之前,Visual Studio会冻结约30秒.

我已经尝试了所有解决类似问题的解决方案,我想我已经做好了一切.以下是我采取的步骤:

  1. 将以下预留添加到HTTP.SYS:

    netsh http add urlacl url=http://+:36899/ user=Everyone

  2. 以管理员身份运行Visual Studio 2012(从技术上讲,我不认为自从我手动设置HTTP.SYS后就不应该这样做了).

  3. 禁用Windows防火墙.

  4. 删除我的"我的文档"文件夹中的IISExpress文件夹以确保默认设置.

  5. 允许Visual Studio在我的Web项目的applicationhost.config中创建条目.然后手动修改配置文件来改变localhost192.168.0.100这是我的本地IP.然后返回到Visual Studio中的项目属性并将localhost更改为IP并保存项目,以便我的项目现在设置为http://192.168.0.100:36899.

我也尝试更改端口并重复上述步骤,因为某些原因导致端口正在使用.

我想让我的IIS Express开发人员实例可以通过Internet上的IP进行远程测试.

asp.net iis-express windows-8 visual-studio-2012

51
推荐指数
9
解决办法
13万
查看次数

如何找到实际的可打印区域?(的PrintDocument)

为什么发现这个神奇的矩形如此困难?

在OnPrintPage事件中,我有PrintPageEventArgs,我试图在最大可打印区域的范围内使用图形绘制.

我尝试过使用PageBounds,PrintableArea,Graphics.VisibleClipBounds等.所有都无法始终获得绘图区域,尤其是从横向切换到纵向布局时.从Landscape切换到Portrait时,PrintableArea似乎永远不会改变.

我还注意到,根据我是否正在进行打印预览和实际打印,如何设置Graphics.VisibleClipBounds存在差异.在预览中它始终显示纵向宽度/高度,因此我必须检查它是否是预览,并且当它是横向时我必须手动交换宽度/高度.

我需要一个算法来计算可打印区域,因为它与当前的图形上下文有关,而不是在实际绘图中没有使用的任意理论打印区域.


我关心的是处理Graphics矩阵偏移.到目前为止,我注意到如何根据以下因素使用硬边缘预翻译图形上下文之间存在严重的不一致:

  • 如果OriginAtMargins为真或假(不符合我的想法)
  • 如果我要打印到打印机,或者使用PrintPreviewControl(我必须检查这是打印预览还是打印到页面以正确处理翻译)
  • 如果我在家里使用我的打印机或在工作时使用我的打印机(两者都表现不同)

有没有一种标准的方法来处理这个问题?我应该重置矩阵吗?当我将OriginAtMargins设置为true时,Graphics会预先转换为84,84,但我的边距是100,100.艰难的利润是16,16.它不应该被翻译成100,100吗?因为0,0应该在页面边界,而不是硬边距.

基本上我的方法应该总是在获得最佳的可打印矩形.我只需要一种与设备无关的一致方式来确保我的绘图原点(0,0)位于页面的左上角,以便上面的Rectangle对我有用.

c# printing gdi+ printdocument

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

通过Interop/pinvoke传递C#回调函数

我正在编写一个C#应用程序,它使用Interop服务来访问本机C++ DLL中的函数.我已经使用了大约10种不同的功能.

现在我不知道如何处理将回调作为参数传递,以便DLL可以调用我的代码.

这是DLL的函数原型:

typedef void (WINAPI * lpfnFunc)(const char *arg1, const char *arg2)
Run Code Online (Sandbox Code Playgroud)

并且允许我传递上述类型的函数:

int WINAPI SetFunc(lpfnFunc f)
Run Code Online (Sandbox Code Playgroud)

这是委托和函数定义的C#代码:

public delegate void Func(string arg1, string arg2);

public static void MyFunc(string arg1, string arg2)
Run Code Online (Sandbox Code Playgroud)

这是我的SetFunc Interop函数的C#代码:

[DllImport("lib.dll", CharSet = CharSet.Ansi)]
public static extern int SetFunc(Func lpfn);
Run Code Online (Sandbox Code Playgroud)

最后这里是我调用SetFunc函数并将其传递给我的回调的代码:

SetFunc(new Func(MyFunc));
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的功能应该被调用.SetFunc函数的返回值是返回Success的错误代码,所以要么它没有调用我的函数,要么因为我的代码错误而无法正常工作.

c# pinvoke interop function callback

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

Visual Studio在不需要时建议完全限定的命名空间

使用Visual Studio 2010(可能还有2008),我注意到Intellisense将为枚举建议完全限定名称空间的行为.

例如,我可以编写如下代码:

element.HorizontalAlignment = HorizontalAlignment.Right;
element.VerticalAlignment = VerticalAlignment.Bottom;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试写它时,它建议我这样写:

element.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
element.VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
Run Code Online (Sandbox Code Playgroud)

这个不必要的额外代码可以真正加起来并使其可读性降低,我必须基本上与Intellisense对抗以避免它.

我有理由这样吗?我可以把它关掉吗?我假设原因是枚举的名称与属性的名称相同.但那真的不是一个好理由.

编辑:

这是另一个演示为什么不需要完全限定命名的示例.

using SomeOtherNamespace;

namespace SomeNamespace
{
    public class Class1
    {
        public Class2 Class2 { get; set; }

        public Class1()
        {
            // These all compile fine and none require fully qualified naming.  The usage is context specific.
            // Intellisense lists static and instance members and you choose what you wanted from the list.

            Class2 = Class2.Default;
            Class2.Name = "Name";
            Class2.Name = …
Run Code Online (Sandbox Code Playgroud)

c# intellisense visual-studio

15
推荐指数
2
解决办法
3080
查看次数

如何强制Task.Factory.StartNew到后台线程?

我已经看到了许多类似的问题,但没有找到我的答案.

我的问题是我用以下流程创建线程:

private void btn_Click(object sender, EventArgs e)
{
    service.GetCount(
        (count, ex) =>
        {
            if (ex != null)
                return;

            for (int i = 0; i < count; i++)
            {
                service.Get(onItemReceived, i);
            }
        }
    );
}

public void GetCount(Action<int, Exception> callback)
{
    var callingThread = TaskScheduler.FromCurrentSynchronizationContext();

    Func<int> action = () =>
    {
        return client.GetCount(); // Synchronous method, could take a long time
    };

    Action<Task<int>> completeAction = (task) =>
    {
        Exception ex = (task.Exception != null) ? task.Exception.InnerException : task.Exception;

        if (callback …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 task threadpool

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

在Windows服务中使用SQL LocalDB

我有一个非常小的测试应用程序,我在安装过程中尝试安装Windows服务并创建LocalDB数据库,然后在Windows服务运行时连接到该LocalDB数据库.

我遇到了从Windows服务连接到LocalDB实例的巨大问题.

我的安装过程完全如下:

  1. 执行安装程序.msi文件,该文件以NT AUTHORITY\SYSTEM帐户运行msiexec进程.

  2. 使用以下命令运行自定义操作以执行SqlLocalDB.exe:

    • sqllocaldb.exe创建MYINSTANCE
    • sqllocaldb.exe分享MYINSTANCE MYINSTANCESHARE
    • sqllocaldb.exe启动MYINSTANCE
  3. 使用ADO.NET(System.Data.SqlConnection)运行自定义C#操作以执行以下操作:

    • 连接到以下连接字符串, Data Source=(localdb)\MYINSTANCE; Integrated Security=true
    • 创建数据库TestDB
    • 使用TestDB
    • 创建表...
  4. 在安装程序完成之前启动Windows服务.

  5. Windows服务安装到LocalSystem帐户,因此也作为NT AUTHORITY\SYSTEM用户帐户运行.

  6. 该服务尝试使用上面使用的相同连接字符串进行连接.

尝试从Windows服务中打开与上述连接字符串的连接时,我一直收到以下错误:

System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误.指定的LocalDB实例不存在.

这是令人沮丧的,因为msi安装程序自定义操作和Windows服务都在相同的Windows用户帐户下运行(我检查过,它们都是NT AUTHORITY\System).那么为什么第一部作品而第二部作品不在我之外.

我已尝试更改自定义操作和Windows服务中使用的连接字符串以使用共享名称(localdb)\.\MYINSTANCESHARE,我从Windows服务获得完全相同的错误.

我尝试将Windows服务登录的用户帐户更改为我的Windows用户帐户,只要我第一次运行命令将其添加到该实例的SQL服务器登录,该帐户就可以正常工作.

我也试过运行一个控制台应用程序并连接到共享名称连接字符串,这也是有效的.

我也尝试从SQL Server Management Studio连接到共享名称,这也是有效的.

然而,这些方法都没有真正解决我的问题.我需要Windows服务,因为它会在计算机启动后立即启动(即使没有用户登录),并且无论登录哪个用户帐户都启动.

Windows服务如何连接到LocalDB私有实例?

我正在使用SQL Server 2014 Express LocalDB.

sql sql-server localdb

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

使Visual Studio设计器忽略公共属性

我有一个带有公共属性的UserControl,使用以下属性:

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Run Code Online (Sandbox Code Playgroud)

我尝试删除所有者表单,在Visual Studio 2010中重新创建一个新表单,并将此UserControl添加到表单.它在Designer文件中不断添加如下行:

this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty")));
Run Code Online (Sandbox Code Playgroud)

这会导致我的应用程序崩溃,因为此属性不是由序列化创建的.

c# serialization designer visual-studio browsable

12
推荐指数
3
解决办法
9174
查看次数

每种类型自定义Json.NET序列化程序设置

我正在使用ApiController,它使用全局HttpConfiguration类来指定JsonFormatter设置.我可以非常容易地全局设置序列化设置:

config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
Run Code Online (Sandbox Code Playgroud)

问题是并非所有设置都适用于我的项目中的所有类型.我想为执行多态序列化的特定类型指定自定义TypeNameHandling和Binder选项.

如何在每个类型上指定JsonFormatter.SerializationSettings,或者在每个ApiController的基础上指定最少?

c# asp.net-mvc json.net asp.net-web-api

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

自动生成设计器集合项的代码隐藏名称

我有一个自定义控件,公共集合标记为DesignerSerializationVisibility.Content.

当我添加使用设计项目的集合,它把它们添加到设计文件和分配所有所需的值,但它给人的集合中的每个元素的总称,如MyClass1,MyClass2等我想每个"名称"属性item成为项目的代码名称,以便我可以在代码中按名称访问该项目.

这是ContextMenuStrip和ToolStrip如何工作的功能.在这些情况下,Name属性显示(Name)在属性网格中.

是否有可用于获取此功能的属性或内容?或者我是否必须编写一个完整的自定义设计器对话框?如果是这样,那么我可以用最简单的方法实现这个目标的例子是什么?

c# designer winforms

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

与GDI +高级色彩混合

使用GDI +和Windows窗体,我希望能够使用笔绘制并根据目标像素颜色混合颜色.

例如,如果我画一条线并且它经过黑色像素,我希望它是一个较浅的颜色(例如白色),以便它可见.当同一条线经过白色像素时,它应该是较暗的颜色(例如黑色),以便它仍然清晰可见.

有没有办法用GDI +做到这一点?

c# gdi+ blending colors winforms

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