【发布时间】:2014-09-26 02:52:34
【问题描述】:
我正在开发一个自动化的 c# 构建,它需要我编写/生成 csproj 文件,然后使用命令行对其进行编译。由于某种原因,当 dll 创建时没有问题,它包含的类被转储到全局命名空间中,而不是我在 .有谁知道这里可能发生了什么?
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputType>Library</OutputType>
<RootNamespace>SimpleDependency.Test</RootNamespace>
<AssemblyName>simpledependency.test</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<ItemGroup>
<Compile Include="*.cs" />
</ItemGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>Bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
我已将 msbuild 设置为 .net 4.0,并在命令行上运行此命令:
msbuild /property:Configuration=Release /property:Platform=AnyCPU
我知道它成功生成了 dll,因为我有另一个依赖项目使用我在这个项目中定义的类,但如果我包括:
using SimpleDependency.Test;
在该代码中,我收到编译错误,说它找不到命名空间“SimpleDependency”。没有这个 using 语句,它编译得很好并且可以工作。有人有什么想法吗?
【问题讨论】:
-
您的类是否使用 SimpleDependency.Test 命名空间定义?定义 RootNamespace 不会在所有没有命名空间的类中强制执行它。
-
定义根命名空间的全部意义在于不必在所有类中编写它
-
对不起,这应该是一个问题,这不是根命名空间的重点吗?
-
好吧,我认为它不会覆盖已经编写的没有任何显式命名空间的 .cs 文件。更多细节在this question.
-
明白了。我猜当您设置根命名空间时,Visual Studio 必须将其注入您创建的每个新类中。