NuGet.Server returns 404 error

后端 未结 10 1614
你的背包
你的背包 2021-01-02 00:17

I have followed the instructions to setup and host my own NuGet feed. I am running the web application on a Windows 2012 (IIS 8.5) box.

I build and

相关标签:
10条回答
  • 2021-01-02 00:44

    If you name you project Nuget.Server, since your generated dll will be Nuget.Server.dll it will not work because Nuget.Server.dll is the actual dll for the server. Rename your Assembly name to something else.

    0 讨论(0)
  • 2021-01-02 00:46

    This answer expands the comment left on AndrewD's answer.

    Like him, I started out with a VB project and I ended up in the same camp as OP. What worked for me however was converting all C# code into VB, within these two files.

    1. Default.aspx
    2. NuGetODataConfig.cs (replaced this one with a new file: NuGetODataConfig.vb)

    For the sake of completion, I'm including the post-converted contents of these files below.


    Default.aspx

    <%@ Page Language="VB" %>
    <%@ Import Namespace="NuGet.Server" %>
    <%@ Import Namespace="NuGet.Server.App_Start" %>
    <%@ Import Namespace="NuGet.Server.Infrastructure" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>NuGet Private Repository</title>
        <style>
            body { font-family: Calibri; }
        </style>
    </head>
    <body>
        <div>
            <h2>You are running NuGet.Server v<%= Gettype(NuGetODataConfig).Assembly.GetName().Version %></h2>
            <p>
                Click <a href="<%= VirtualPathUtility.ToAbsolute("~/nuget/Packages") %>">here</a> to view your packages.
            </p>
            <fieldset style="width:800px">
                <legend><strong>Repository URLs</strong></legend>
                In the package manager settings, add the following URL to the list of 
                Package Sources:
                <blockquote>
                    <strong><%= Helpers.GetRepositoryUrl(Request.Url, Request.ApplicationPath) %></strong>
                </blockquote>
                <% if string.IsNullOrEmpty(ConfigurationManager.AppSettings("apiKey")) Then %>
                To enable pushing packages to this feed using the <a href="https://www.nuget.org/downloads">NuGet command line tool</a> (nuget.exe), set the <code>apiKey</code> appSetting in web.config.
                <% else  %>
                Use the command below to push packages to this feed using the <a href="https://www.nuget.org/downloads">NuGet command line tool</a> (nuget.exe).
                <blockquote>
                    <strong>nuget.exe push {package file} {apikey} -Source <%= Helpers.GetPushUrl(Request.Url, Request.ApplicationPath) %></strong>
                </blockquote>
                <% end if %>
            </fieldset>
    
            <% if Request.IsLocal Then  %>
            <fieldset style="width:800px">
                <legend><strong>Adding packages</strong></legend>
    
                To add packages to the feed put package files (.nupkg files) in the folder
                <code><% = PackageUtility.PackagePhysicalPath %></code><br/><br/>
    
                Click <a href="<%= VirtualPathUtility.ToAbsolute("~/nuget/clear-cache") %>">here</a> to clear the package cache.
            </fieldset>
            <% End If %>
        </div>
    </body>
    </html>
    

    NuGetODataConfig.vb

    Imports System.Net.Http
    Imports System.Web.Http
    Imports System.Web.Http.ExceptionHandling
    Imports System.Web.Http.Routing
    Imports NuGet.Server
    Imports NuGet.Server.Infrastructure
    Imports NuGet.Server.V2
    
    <Assembly: WebActivatorEx.PreApplicationStartMethod(GetType(MGINuGet.App_Start.NuGetODataConfig), "Start")>
    
    Namespace MGINuGet.App_Start
        Public Module NuGetODataConfig
            Public Sub Start()
                ServiceResolver.SetServiceResolver(New DefaultServiceResolver())
    
                Dim config As HttpConfiguration = GlobalConfiguration.Configuration
    
                NuGetV2WebApiEnabler.UseNuGetV2WebApiFeed(config, "NuGetDefault", "nuget", "PackagesOData")
    
                config.Services.Replace(GetType(IExceptionLogger), New TraceExceptionLogger())
    
                Trace.Listeners.Add(New TextWriterTraceListener(System.Web.Hosting.HostingEnvironment.MapPath("~/NuGet.Server.log")))
                Trace.AutoFlush = True
    
                config.Routes.MapHttpRoute(name:="NuGetDefault_ClearCache",
                                           routeTemplate:="nuget/clear-cache",
                                           defaults:=New With {Key .controller = "PackagesOData", Key .action = "ClearCache"},
                                           constraints:=New With {Key .httpMethod = New HttpMethodConstraint(HttpMethod.Get)})
            End Sub
        End Module
    End Namespace
    
    0 讨论(0)
  • 2021-01-02 00:50

    If you create a new empty VB project you will also get a 404 (in Packages and browsing using NuGet Manager).

    You appear to have to create the project as C# and it works as advertised!

    And yet the source code appears identical :(

    0 讨论(0)
  • 2021-01-02 00:57

    FWIW, I made the mistake of trying to fetch the packages from http://[server]/nuget/Packages and got the same error. Removing /Packages from the end of the source URL was the answer, so http://[server]/nuget is the correct url.

    0 讨论(0)
  • 2021-01-02 00:57

    I was having similar issue and I found a solution! I created a private nuget server following the instructions to create an empty ASP.NET project (I'm on VS2015) and then installing nuget.server (currently v2.11.3.0). I was able to run and see web page except I was not able to use "nuget.exe push" to upload packages. I got the dreaded 404 not found error.

    I eventually cloned the nuget.server source code off github and ran that directly which worked fine!? I discovered my web.config was incorrect. For me the key line was

    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/> 
    

    in the

    <system.webServer>/<handlers> 
    

    section.

    I suggest anyone having issues should go to github and compare web.config files.

    BTW: The nuget.server install is supposed to replace your web.config. This may not have worked correctly for me.

    0 讨论(0)
  • 2021-01-02 01:02

    I had this problem with a clean Visual Studio 2017 Web project.

    Recreating from Visual Studio 2015 and targeting .NET 4.6.1 sorted it out

    0 讨论(0)
提交回复
热议问题