Visual Studio:项目名称中的程序集名称和默认命名空间
Visual Studio: Assembly name and Default namespace from project name
上下文:在项目属性中设置程序集 Name/Default 命名空间(右键单击项目、属性、应用程序选项卡;或编辑 .csproj)。
我想在那里添加一个参数,明确地让它们跟在项目名称之后,加上一些自定义后缀。因此,如果我重命名我的项目,程序集 name/namespace 会遵循该重命名。
示例:项目名为 foo
→ foo_suffix.dll。如果我将项目重命名为 foo1
→ foo1_suffix.dll。
命名空间的行为相同。
阅读Common macros for MSBuild commands and properties,
我尝试在 VS 和 .csproj 文件中输入 $(ProjectName)
,但我得到了一个与此完全相同的 .dll。
我该如何完成?
How can I get this done?
1。尝试使用 this document.
中的 $(MSBuildProjectName)
属性
您正在开发 C# project(csproj)
,而您上面的文档是关于 macros in C++ projects(vcxproj)
。所以我觉得$(MSBuildProjectName)
属性经过我的多次测试,可以更适合你
(我试过$(ProjectName)
,但只有当我设置<AssemblyName>$(ProjectName)</AssemblyName>
这样的东西时它才有效,如果我添加像$(ProjectName)_suffix
这样的后缀,有时输出是 _suffix.dll
。但是如果我使用 $(MSBuildProjectName)!
)
它总是很好用
I get the desired behaviour, but that is inconsistent with what I can
see in project, Properties, Application tab.
2。尝试重新加载项目文件 (Right-click project, unload.., reload...
) 以更新 UI.
从您的评论来看,$(ProjectName)_suffix
似乎在您的机器上运行良好?如果是这样,您仍然可以使用 $(ProjectName)
属性。
您遇到的是 Msbuild 和 VS 的预期行为。 VS 将在 project loading process
期间从 csproj
读取值。然后通过UI显示相关值。
所以我们重命名项目名称然后构建项目后,我们可以在输出文件夹中得到一个ProjectName_suffix.dll
。但是 UI 仍然没有改变(不一致),因为现在我们需要 更新 UI。
您可以 right-click project node, unload the project=>reload the project
获得 UI 更新。现在输出 xx.dll 可以与您在 project, Properties, Application tab
中看到的一致。每次重命名项目后都需要我们重新加载项目,然后 UI 将与您的 xx.dll 一致。实际上它不会影响你的构建,尽管 UI 没有更新,输出可以是你想要的行为。
3。以上,更多的是与Assembly Name and Project Name
之间的关系。您应该知道的一点是 msbuild
(csproj) 在创建项目后不会修改源文件 (xx.cs)。
因此假设您有一个 Class1.cs
文件,其命名空间为 Library
。如果将项目重命名为 NewLibrary
,请重新加载项目,您可以在 project, Properties, Application tab
中看到命名空间现在是 NewLibrary
。但是 Class1.cs 文件的命名空间仍然是旧的 Library
。这是 VS 中的预期行为,如果您创建新的 xx.cs 文件,新的命名空间 NewLibrary
将起作用。
希望以上对您有所帮助:)
上下文:在项目属性中设置程序集 Name/Default 命名空间(右键单击项目、属性、应用程序选项卡;或编辑 .csproj)。
我想在那里添加一个参数,明确地让它们跟在项目名称之后,加上一些自定义后缀。因此,如果我重命名我的项目,程序集 name/namespace 会遵循该重命名。
示例:项目名为 foo
→ foo_suffix.dll。如果我将项目重命名为 foo1
→ foo1_suffix.dll。
命名空间的行为相同。
阅读Common macros for MSBuild commands and properties,
我尝试在 VS 和 .csproj 文件中输入 $(ProjectName)
,但我得到了一个与此完全相同的 .dll。
我该如何完成?
How can I get this done?
1。尝试使用 this document.
中的$(MSBuildProjectName)
属性
您正在开发 C# project(csproj)
,而您上面的文档是关于 macros in C++ projects(vcxproj)
。所以我觉得$(MSBuildProjectName)
属性经过我的多次测试,可以更适合你
(我试过$(ProjectName)
,但只有当我设置<AssemblyName>$(ProjectName)</AssemblyName>
这样的东西时它才有效,如果我添加像$(ProjectName)_suffix
这样的后缀,有时输出是 _suffix.dll
。但是如果我使用 $(MSBuildProjectName)!
)
I get the desired behaviour, but that is inconsistent with what I can see in project, Properties, Application tab.
2。尝试重新加载项目文件 (Right-click project, unload.., reload...
) 以更新 UI.
从您的评论来看,$(ProjectName)_suffix
似乎在您的机器上运行良好?如果是这样,您仍然可以使用 $(ProjectName)
属性。
您遇到的是 Msbuild 和 VS 的预期行为。 VS 将在 project loading process
期间从 csproj
读取值。然后通过UI显示相关值。
所以我们重命名项目名称然后构建项目后,我们可以在输出文件夹中得到一个ProjectName_suffix.dll
。但是 UI 仍然没有改变(不一致),因为现在我们需要 更新 UI。
您可以 right-click project node, unload the project=>reload the project
获得 UI 更新。现在输出 xx.dll 可以与您在 project, Properties, Application tab
中看到的一致。每次重命名项目后都需要我们重新加载项目,然后 UI 将与您的 xx.dll 一致。实际上它不会影响你的构建,尽管 UI 没有更新,输出可以是你想要的行为。
3。以上,更多的是与Assembly Name and Project Name
之间的关系。您应该知道的一点是 msbuild
(csproj) 在创建项目后不会修改源文件 (xx.cs)。
因此假设您有一个 Class1.cs
文件,其命名空间为 Library
。如果将项目重命名为 NewLibrary
,请重新加载项目,您可以在 project, Properties, Application tab
中看到命名空间现在是 NewLibrary
。但是 Class1.cs 文件的命名空间仍然是旧的 Library
。这是 VS 中的预期行为,如果您创建新的 xx.cs 文件,新的命名空间 NewLibrary
将起作用。
希望以上对您有所帮助:)