2016-11-04 4 views
6

Я использую Visual Studio 14 (VS 2015) Update 3, и я хочу построить REST API на основе .Net Core 1, используя Kestrel в качестве сервера..NET Core .csproj Выходной путь не работает правильно

Я хочу, чтобы иметь возможность использовать .csproj вместо старого .xproj для того, чтобы использовать MSBuild, как я в других проектах. Для этого я использовал tutorial they have.

Проблема заключается в том, что, когда я определяю «OutputPath» как «bin \ Debug» (например, для режима отладки), Visual Studio строит проект и устанавливает результаты сборки в «bin \ Debug \\ bin \ Debug \ netcoreapp1 +0,0 \ win7-x64" .

Если я использую .xproj и строить, результаты сохраняются в «bin \ Debug \ netcoreapp1.0», что является ожидаемым поведением.

Что происходит?

.csproj:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    <BaseNuGetRuntimeIdentifier>win7</BaseNuGetRuntimeIdentifier> 
    <TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier> 
    <TargetFrameworkVersion>v1.0</TargetFrameworkVersion> 
    <NoStdLib>true</NoStdLib> 
    <NoWarn>$(NoWarn);1701</NoWarn> 
    <ProjectGuid>{D21ABA46-65F9-4B47-882C-F9C0765052DD}</ProjectGuid> 
    <OutputType>Exe</OutputType> 
    <AppDesignerFolder>Properties</AppDesignerFolder> 
    <RootNamespace>MyAPP</RootNamespace> 
    <AssemblyName>MyAPP</AssemblyName> 
    <FileAlignment>512</FileAlignment> 
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <PlatformTarget>x64</PlatformTarget> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <IntermediateOutputPath>.\obj\Debug</IntermediateOutputPath> 
    <OutputPath>.\bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <PlatformTarget>x64</PlatformTarget> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>.\bin\Release</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
    <ItemGroup> 
    <Compile Include="src\**\*.cs" /> 
    </ItemGroup> 
    <ItemGroup> 
    <None Include="project.json" /> 
    <None Include="appsettings.json" /> 
    </ItemGroup> 
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(VSToolsPath)\DotNet.Web\Microsoft.DotNet.Web.targets" Condition="'$(VSToolsPath)' != ''" /> 
    <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
     Other similar extension points exist, see Microsoft.Common.targets. 
    <Target Name="BeforeBuild"> 
    </Target> 
    <Target Name="AfterBuild"> 
    </Target> 
    --> 
    <PropertyGroup> 
    <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two 
      properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and 
      to prevent it from outputting a warning (MSB3644). 
     --> 
    <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories> 
    <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths> 
    <!-- MSBuild thinks all EXEs need binding redirects, not so for CoreCLR! --> 
    <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences> 
    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects> 
    <!-- Set up debug options to run with host, and to use the CoreCLR debug engine --> 
    <StartAction>Program</StartAction> 
    <StartProgram>$(TargetDir)</StartProgram> 
    <DebugEngines>{2E36F1D4-B23C-435D-AB41-18E608940038}</DebugEngines> 
    </PropertyGroup> 
</Project> 

project.json:

{ 
    "version": "1.0.0", 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.0", 
     "type": "build" 
    }, 
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0", 
    "Microsoft.AspNetCore.Mvc": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.0.0", 
    "Microsoft.Extensions.Logging.Console": "1.0.0", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0" 
    }, 

    "runtimes": { 
    "win7-x64": {}, 
    "ubuntu.14.04-x64": {}, 
    "osx.10.10-x64": {} 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ "dnxcore50", "portable-net452" ] 
    } 
    }, 

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "postpublish": [ "dotnet publish --publish-folder ./bin" ] 
    } 
} 
+0

Вместо портирование файла вручную через вы пробовали подножку 'Dotnet migrate' который должен мигрировать свой проект .json перейти к новой системе – TerribleDev

+0

Это было до того, как Microsoft вернулась к .csproj. Спасибо в любом случае за ваш ответ;) –

ответ

0

Использование <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>